Go 中的XML 資料遍歷
問題:
問題:問題:
XML 資料通常會帶來挑戰無需事先了解XPath 即可存取特定元素。 xml.Unmarshal方法在這方面有局限性,需要使用者指定確切的路徑來獲取資料。
解決方案:type Node struct { XMLName xml.Name Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` }要靈活地遍歷XML數據,我們可以利用遞歸數據結構和簡單的步行函數。
遞歸資料結構:
func walk(nodes []Node, f func(Node) bool) { for _, n := range nodes { if f(n) { walk(n.Nodes, f) } } }在此結構中,每個Node 代表XML 文件中的一個元素,包含其名稱、內部XML 內容(對於非巢狀元素)和子節點切片。
步行函數:
將 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範例:以下程式碼遍歷問題中的XML 文件,列印其中的元素名稱順序:輸出:
以上是如何在Go中不使用XPath有效率地遍歷XML資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!