最近我开始使用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内没有数据显示。
不确定Prolog的问题是什么。
答案 0 :(得分:2)
在解析非utf8 xml文档之前,您必须先定义字符集阅读器,这要感谢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)