Golang에서 XML 데이터를 탐색하려면 재귀 구조체를 구성하고 걷기 기능을 사용하여 바닐라 인코딩/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을 다음으로 역마샬링합니다. struct:
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 })
속성이 있는 노드의 경우 향상된 기능은 다음과 같습니다. 버전:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!