Suche…


Bemerkungen

Während viele Verwendungen des encoding/xml Pakets das Marshallen und das Aufheben des Marshalls für eine Go- struct , ist zu beachten, dass dies keine direkte Zuordnung ist. In der Paketdokumentation heißt es:

Die Zuordnung zwischen XML-Elementen und Datenstrukturen ist inhärent fehlerhaft: Ein XML-Element ist eine auftragsabhängige Sammlung anonymer Werte, während eine Datenstruktur eine auftragsunabhängige Sammlung von benannten Werten ist.

Bei einfachen, ungeordneten Schlüsselwertpaaren ist die Verwendung einer anderen Kodierung wie Gob's oder JSON möglicherweise besser geeignet. Für geordnete Daten- oder Ereignis- / Rückruf-basierte Datenströme ist XML die beste Wahl.

Grundlegende Dekodierung / Aufhebung der Verschachtelung verschachtelter Elemente mit Daten

XML-Elemente verschachteln sich häufig, haben Daten in Attributen und / oder als Zeichendaten. Die Erfassung dieser Daten erfolgt durch Verwendung von ,attr bzw. ,chardata für diese Fälle.

var doc = `
<parent>
  <child1 attr1="attribute one"/>
  <child2>and some cdata</child2>
</parent>
`

type parent struct {
    Child1 child1 `xml:"child1"`
    Child2 child2 `xml:"child2"`
}

type child1 struct {
    Attr1 string `xml:"attr1,attr"`
}

type child2 struct {
    Cdata1 string `xml:",cdata"`
}

func main() {
    var obj parent
    err := xml.Unmarshal([]byte(doc), &obj)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(obj.Child2.Cdata1)

}

Playground



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow