我必须解析遗留系统的xml输出,因为它们出于某种原因认为将值的ID添加为标记名称是明智的。
像这样:
<ValueList>
<ArraySize>2</ArraySize>
<v89BNZMpdlWXkuv>value1</v89BNZMpdlWXkuv>
<v89N83oCrGhI7jh>value2</v89N83oCrGhI7jh>
</ValueList>
我想将它解析为这样的结构:
type ValueList struct {
Values []Value
}
type Value struct {
ID string
Value String
}
我已经开始使用自定义unmarshal函数了
func (vl *ValueList) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
...
}
并从xml.Decoder
获得令牌,但这是丑陋的。有没有更好的办法?
是的,您可以使用xmlquery来解析XML并提取数据,甚至是动态标记名称。像这样的代码:
doc,err:=xmlquery.Parse(`<xml>..`)
node:=xmlquery.FindOne(doc,"//ValueList")
// Travel all child-node of ValueList
for n:=node.FirstChild;n!=nil;n=n.NextSibling{
fmt.Println(n.Data) // Ouptut name: ArraySize,v89BNZMpdlWXkuv,v89N83oCrGhI7jh
fmt.Println(n.InnerText())// Value of child-node.
}
希望可以帮到你。