XML 구문 분석 세계에서 xml.Unmarshal 메소드는 XML 데이터를 Go 구조체로 변환하는 구조화된 접근 방식을 제공합니다. 그러나 전체 문서를 동적으로 탐색하려고 할 때 제약 조건으로 인해 문제가 발생합니다.
다음과 같은 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의 기능을 활용할 수 있습니다.
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) } } }
이 접근 방식을 사용하면 전체 문서를 탐색하고 각 노드를 다음과 같이 처리할 수 있습니다. 필요합니다.
속성을 갖춘 향상된 솔루션
속성에 액세스해야 하는 경우 업데이트된 버전은 다음과 같습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!