> 백엔드 개발 > Golang > XPath를 사용하지 않고 Go에서 XML 데이터를 효율적으로 탐색하려면 어떻게 해야 합니까?

XPath를 사용하지 않고 Go에서 XML 데이터를 효율적으로 탐색하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-11-29 06:57:10
원래의
523명이 탐색했습니다.

How Can I Efficiently Traverse XML Data in Go Without Using XPath?

Go의 XML 데이터 탐색

문제:

XML 데이터는 종종 문제를 야기합니다. XPath에 대한 사전 지식 없이 특정 요소에 액세스하게 됩니다. 이와 관련하여 xml.Unmarshal 메서드에는 사용자가 데이터를 얻기 위해 정확한 경로를 지정해야 한다는 제한이 있습니다.

해결책:

XML 데이터를 유연하게 탐색하려면 다음을 수행할 수 있습니다. 간단한 걷기 기능과 함께 재귀 데이터 구조를 활용합니다.

재귀 데이터 구조:

type Node struct {
    XMLName xml.Name
    Content []byte `xml:",innerxml"`
    Nodes   []Node `xml:",any"`
}
로그인 후 복사

이 구조에서 각 노드는 해당 이름, 내부 XML 콘텐츠(중첩되지 않은 요소의 경우) 및 하위 노드 조각을 포함하는 XML 문서의 요소를 나타냅니다.

걷기 함수:

func walk(nodes []Node, f func(Node) bool) {
    for _, n := range nodes {
        if f(n) {
            walk(n.Nodes, f)
        }
    }
}
로그인 후 복사

재귀적으로 걷기 함수 노드 트리를 순회하며, 발견된 각 노드에 대해 제공된 함수 f를 호출합니다.

사용법:

XML 문서를 순회하고 그에 따라 해당 요소를 처리하려면:

  1. XML 데이터를 노드 구조체로 역마샬링합니다.
  2. 정의 노드 처리 기준(예: 요소 이름 또는 콘텐츠 기반)을 지정하는 필터 함수 f.
  3. 루트 노드와 필터 함수를 매개변수로 사용하여 걷기 함수를 호출합니다.

예:

다음 코드는 질문의 XML 문서를 순회하여 요소 이름을 주문:

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
로그인 후 복사

위 내용은 XPath를 사용하지 않고 Go에서 XML 데이터를 효율적으로 탐색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿