Go 中的 XML 数据遍历
问题:
XML 数据通常会带来挑战无需事先了解 XPath 即可访问特定元素。 xml.Unmarshal方法在这方面有局限性,需要用户指定确切的路径来获取数据。
解决方案:
要灵活地遍历XML数据,我们可以利用递归数据结构和简单的步行函数。
递归数据结构:
type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
在此结构中,每个 Node 代表 XML 文档中的一个元素,包含其名称、内部 XML 内容(对于非嵌套元素)和子节点切片。
步行函数:
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
递归步行函数遍历节点树,为每个遇到的节点调用提供的函数 f。
用法:
遍历 XML 文档并相应地处理其元素:
示例:
以下代码遍历问题中的 XML 文档,打印其中的元素名称顺序:
content := Node{} if err := xml.Unmarshal([]byte(rawXML), &content); err != nil { // Handle error } walk(content.Nodes, func(n Node) bool { fmt.Println(n.XMLName.Local) return true })
输出:
content p animal p dog p birds p p animal p
以上是如何在Go中不使用XPath高效遍历XML数据?的详细内容。更多信息请关注PHP中文网其他相关文章!