Prolog没有进行XML解析

时间:2019-03-28 02:05:15

标签: xml go xml-parsing

最近我开始使用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的问题是什么。

1 个答案:

答案 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)