Поиск…
замечания
Хотя многие из применений пакета 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)
}