Go 中的XML 資料遍歷
問題:
問題:問題:
XML 資料通常會帶來挑戰無需事先了解XPath 即可存取特定元素。 xml.Unmarshal方法在這方面有局限性,需要使用者指定確切的路徑來獲取資料。
解決方案:type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }
遞歸資料結構:
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }
步行函數:
將 XML 資料解組到 Node 結構中。
定義篩選函數 f,指定處理節點的條件(例如,基於元素名稱或內容)。 以根節點和濾波函數作為參數呼叫 walk 函數。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中文網其他相關文章!