golang XML解析动态标签名称

问题描述 投票:1回答:1

我必须解析遗留系统的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获得令牌,但这是丑陋的。有没有更好的办法?

xml go xml-parsing
1个回答
0
投票

是的,您可以使用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.
}

希望可以帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.