最近我开始使用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有什么问题。
在解析非utf8 xml文档之前,你必须使用charset reader,感谢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)