Поиск…


замечания

Хотя многие из применений пакета encoding/xml включают маршалинг и unmarshaling в struct Go, стоит отметить, что это не является прямым отображением. В документации к упаковке указано:

Сопоставление между элементами XML и структурами данных по своей сути ошибочно: элемент XML представляет собой зависящую от заказов коллекцию анонимных значений, а структура данных - независимый от заказов набор именованных значений.

Для простых, неупорядоченных пар ключ-значение, использование другой кодировки, такой как Gob или JSON, может быть лучше подходит. Для упорядоченных потоков данных, основанных на данных или событиях / обратном вызове, XML может быть лучшим выбором.

Базовое декодирование / разборка вложенных элементов с данными

Элементы XML часто гнездятся, имеют данные в атрибутах и ​​/ или как символьные данные. Способ захвата этих данных заключается в использовании ,attr и ,chardata соответственно для этих случаев.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow