Разбор XML не происходит с Прологом - PullRequest
1 голос
/ 28 марта 2019

Недавно я начал использовать Go. Я столкнулся с одной проблемой при разборе XML.

Вот вопрос:

Я успешно могу проанализировать следующий XML:

<Root>
<cookie name="e1">hsdhsdhs</cookie>
<cookie name="e2">sssss</cookie>
<cookie name="e3">null</cookie>
<info>
<name>sam</name>
</info>
</Root>

Вот структуры:

type Profile struct {
    RootElement xml.Name    `xml:"Root"`
    CookieList  []Cookie    `xml:"cookie"`
    Info        Information `xml:"info"`
}

type Cookie struct {
    Name  string `xml:"name,attr"`
    Value string `xml:",chardata"`
}

type Information struct {
    Name       string `xml:"name"`
}

И приведенная выше структура работает нормально.

profile := Profile{}
xml.Unmarshal([]byte(xmlString), &profile)
jsonData, _ := json.Marshal(profile)
fmt.Println(string(jsonData))

Но как я веду пролог в XML:

<?xml version="1.0" encoding="EUC-JP"?>
    <Root>
    <cookie name="e1">hsdhsdhs</cookie>
    <cookie name="e2">sssss</cookie>
    <cookie name="e3">null</cookie>
    <info>
    <name>sam</name>
    </info>
    </Root>

затем во время печати данные не отображаются в JSON.

Не уверен, в чем здесь проблема с Прологом.

1 Ответ

2 голосов
/ 28 марта 2019

Перед синтаксическим анализом XML-документа не-utf8 вам необходимо настроить устройство чтения кодов, благодаря golang.org/x/net/html/charset все, что вам нужно сделать, это просто заменить эту строку:

xml.Unmarshal([]byte(xmlString), &profile)

с:

decoder := xml.NewDecoder(bytes.NewBufferString(xmlString))
decoder.CharsetReader = charset.NewReaderLabel
err := decoder.Decode(&profile)
...