Golang:使用动态属性解组 XML
简介:
在 Go 中,encoding/xml 提供了处理 XML 数据的高效且通用的方法。然而,在处理具有动态属性的 XML 元素时,由于存在未知数量和类型的属性,解组变得具有挑战性。
问题:
如何使用以下方法解组 XML 标签:当你没有预料到会遇到的确切属性时,如何在 Go 中使用动态属性?
答案:
在 2017 年底之前,Go 的 XML 解组不直接支持这一点。然而,随着encoding/xml包的进步,这个功能已经实现了。
要解组具有动态属性的XML标签,您可以使用以下语法:
type MyStruct struct { Attributes []xml.Attr `xml:",any,attr"` }
这里有一个例子来说明它是如何工作的:
package main import ( "encoding/xml" "fmt" ) func main() { type MyStruct struct { Attributes []xml.Attr `xml:",any,attr"` } data := `` var v MyStruct if err := xml.Unmarshal([]byte(data), &v); err != nil { panic(err) } fmt.Println(v.Attributes) }
在此示例中,MyStruct 类型定义了一个名为 Attributes 的字段。 xml:"...,any,attr" 标记指示解组器将任何 XML 属性作为 xml.Attr 切片分配给此字段。
当解组器遇到 data 变量中提供的 XML 数据时,它会成功将未知属性(ATTR1 和 ATTR2)解组到 v 结构的 Attributes 字段中。这允许动态处理具有不同属性集的 XML 元素。
请注意,此功能需要 Go 版本 1.9 或更高版本。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3