要在 Golang 中遍歷 XML 數據,可以透過構造遞歸結構體並使用 walk 函數來利用普通編碼/xml方法.
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:
<content> <p>this is content area</p> <animal> <p>This id dog</p> <dog> <p>tommy</p> </dog> </animal> <birds> <p>this is birds</p> <p>this is birds</p> </birds> <animal> <p>this is animals</p> </animal> </content>
遍歷XML 並處理每個節點及其子節點:
將XML解組為結構體:
var content Node if err := xml.Unmarshal(xmlData, &content); err != nil { // handle error }
使用walk 函數遍歷結構體:
walk(content.Nodes, func(n Node) bool { // Process the node or traverse its child nodes here fmt.Printf("Node: %s\n", n.XMLName.Local) return true })
對於有屬性的節點,這裡有一個增強的version:
type Node struct { XMLName xml.Name Attrs []xml.Attr `xml:",any,attr"` Content []byte `xml:",innerxml"` Nodes []Node `xml:",any"` } func (n *Node) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { n.Attrs = start.Attr type node Node return d.DecodeElement((*node)(n), &start) }
這允許存取節點處理邏輯中的屬性。
以上是如何在Golang中高效率遍歷XML資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!