golang XML解析动态标签名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang XML解析动态标签名称相关的知识,希望对你有一定的参考价值。

我必须解析遗留系统的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.
}

希望可以帮到你。

以上是关于golang XML解析动态标签名称的主要内容,如果未能解决你的问题,请参考以下文章

使用 SAX 解析器,如何解析具有相同名称标签但元素不同的 xml 文件?

解析带有重复标签的 XML 文件

关于ribo的代码来解析从apk到xml的信息

golang中使用消息名称创建protobuf消息

使用golang时浏览器错误地解释了xml标签(我认为)

如何将动态XML中的嵌套标签转换为for循环?