2012-11-16 3 views
16

go xml package에서 볼 수있는 가능성은 없습니다. Go은 구조 트리를 정의하고 XML 트리에 매핑하고 xml.NewDecoder(myXmlString).Decode(myStruct)을 사용하여 deserialize 할 수 있습니다.Go에서 XPath를 사용하여 XML에서 값을 얻는 방법

Go 구조체의 필요한 트리를 정의하더라도 XPath를 사용하여 트리를 쿼리 할 수 ​​없습니다.

C#은 편리한 기능을 가지고 있습니다. SelectSingleNode C# 클래스에서 전체 트리 구조를 복제하지 않고 XPath를 지정하여 XML 트리에서 값을 선택할 수 있습니다.

이동 중에도 비슷한 방법이 있습니까? 그렇다면 XML 패키지를 재사용하는 가장 간단한 방법은 무엇입니까?

답변

3

, 네이티브 go xml encoder 패키지와 XML에서 값을 읽을 수 있습니다. xml.Unmarshal() 함수를 사용합니다. Here은 성공 사례입니다.

package main 

import "fmt" 
import "encoding/xml" 

func main() { 
    type People struct { 
     Names []string `xml:"Person>FullName"` 
    } 

    data := ` 
     <People> 
      <Person> 
       <FullName>Jerome Anthony</FullName> 
      </Person> 
      <Person> 
       <FullName>Christina</FullName> 
      </Person> 
     </People> 
    ` 

    v := People{Names: []string{}} 
    err := xml.Unmarshal([]byte(data), &v) 
    if err != nil { 
     fmt.Printf("error: %v", err) 
     return 
    } 
    fmt.Printf("Names of people: %q", v) 
} 
11

Go의 표준 패키지에는 xpath 구문 분석이 없으므로 타사 패키지를 사용해야합니다.

는 그런 일이 난의 패키지를 가져올 서브 패키지는 github.com/moovweb/gokogiri/xpath

9

또한 xmlpath 패키지있다입니다

CGO 사용 libxml2를을 기반으로 Gokogiri
알고있다.

샘플 사용 : 심지어 XPath는 아니지만

path := xmlpath.MustCompile("/library/book/isbn") 
root, err := xmlpath.Parse(file) 
if err != nil { 
    log.Fatal(err) 
} 
if value, ok := path.String(root); ok { 
    fmt.Println("Found:", value) 
} 
+0

http.Get 출력과 함께 어떻게 사용할 수 있는지 알고 계십니까? – Mahdi

1

xquery 캔은 XPath에, 자사의 xpath 구현을 사용하여 XML 문서에서 데이터를 추출 할 수 있습니다.

관련 문제