Szukaj…


Uwagi

Chociaż wiele zastosowań pakietu encoding/xml obejmuje marshaling i unmarshaling do struct Go, warto zauważyć, że nie jest to bezpośrednie mapowanie. Dokumentacja pakietu stanowi:

Mapowanie między elementami XML a strukturami danych jest z natury wadliwe: element XML to zbiór anonimowych wartości zależny od zamówienia, a struktura danych to zbiór nazwanych niezależny od zamówienia.

W przypadku prostych, nieuporządkowanych par klucz-wartość lepszym rozwiązaniem może być użycie innego kodowania, takiego jak Gob lub JSON . W przypadku uporządkowanych danych lub strumieni danych opartych na zdarzeniach / wywołaniach zwrotnych najlepszym wyborem może być XML.

Podstawowe dekodowanie / odinstalowywanie zagnieżdżonych elementów z danymi

Elementy XML często zagnieżdżają się, mają dane w atrybutach i / lub jako dane znakowe. ,chardata przechwytywania tych danych jest użycie odpowiednio ,attr i ,chardata w tych przypadkach.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow