2012-11-16 6 views
16

Blick auf go xml package Ich konnte keine solche Möglichkeit finden. Go nur erlaubt, Struktur von Strukturen zu definieren, ordnen Sie sie in XML-Struktur und deserialize mit xml.NewDecoder(myXmlString).Decode(myStruct).Wie bekomme ich einen Wert von einem XML mit XPath in Go

Auch wenn ich benötigte Struktur von Go-Strukturen definiere, kann ich diese Struktur mit XPath immer noch nicht abfragen.

C# verfügt über die komfortable Funktion SelectSingleNode, mit der der Wert aus der XML-Struktur durch Angabe von XPath ohne Duplizieren der gesamten Baumstruktur in C# -Klassen ausgewählt werden kann.

Gibt es eine ähnliche Möglichkeit in Go? Wenn nicht dann, was ist der einfachste Weg, es zu implementieren (möglicherweise Wiederverwendung Xml-Paket)?

Antwort

3

Auch wenn nicht XPath können Sie Werte aus XML mit dem nativen go xml encoder Paket lesen. Sie würden die Funktion xml.Unmarshal() verwenden. Here ist ein Go Play Beispiel.

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

In den Standard-Paketen von Go gibt es kein Xpath-Parsing, daher müssen Sie auf ein Paket von Drittanbietern zurückgreifen.

Dann, den ich kenne ist Gokogiri
Das Paket auf libxml2 basiert mit CGO

Die subpackage Sie importieren möchten, ist github.com/moovweb/gokogiri/xpath

9

Es gibt auch die xmlpath Paket.

Verwendungsbeispiel:

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

Wissen Sie, wie es mit http.Get Ausgang verwendet werden könnte? – Mahdi

1

xquery Dose kann Sie Daten aus XML-Dokumenten unter Verwendung von XPath extrahieren, das eine xpath Umsetzung.

package main 

import (
    "fmt" 
    "strings" 
    "github.com/antchfx/xquery/xml" 
) 

func main() { 
    htmlstr := `<?xml version="1.0" ?> 
    <html> 
    <head> 
    <title>this is a title</title> 
    </head> 
    <body>Hello,World</body> 
    </html>` 
    root, err := xmlquery.Parse(strings.NewReader(htmlstr)) 
    if err != nil { 
     panic(err) 
    } 
    title := xmlquery.FindOne(root, "//title") 
    fmt.Println(title.InnerText()) 
} 
Verwandte Themen