Golang: демаршалинг XML с динамическими атрибутами
Введение:
В Go кодирование/xml предоставляет эффективный и универсальный способ обработки XML-данных. Однако при работе с элементами XML, имеющими динамические атрибуты, демаршалинг становится затруднительным из-за неизвестного количества и типов присутствующих атрибутов.
Вопрос:
Как можно демаршалировать теги XML с помощью динамические атрибуты в Go, когда вы не ожидаете, какие именно атрибуты встретятся?
Ответ:
До конца 2017 года это напрямую не поддерживалось в демаршалинге XML Go. Однако с развитием пакета кодирования/xml эта функциональность была реализована.
Чтобы демаршалировать теги XML с динамическими атрибутами, вы можете использовать следующий синтаксис:
type MyStruct struct { Attributes []xml.Attr `xml:",any,attr"` }
Вот пример, иллюстрирующий, как это работает:
package main import ( "encoding/xml" "fmt" ) func main() { type MyStruct struct { Attributes []xml.Attr `xml:",any,attr"` } data := `` var v MyStruct if err := xml.Unmarshal([]byte(data), &v); err != nil { panic(err) } fmt.Println(v.Attributes) }
В этом примере тип MyStruct определяет поле с именем Атрибуты. Тег xml:"...,any,attr" указывает демаршаллеру назначать любые атрибуты XML этому полю в виде срезов xml.Attr.
Когда демаршаллер встречает данные XML, представленные в переменной данных, он успешно демаршалирует неизвестные атрибуты (ATTR1 и ATTR2) в поле Attributes структуры v. Это позволяет динамически обрабатывать элементы XML с различными наборами атрибутов.
Обратите внимание, что для этой функции требуется Go версии 1.9 или более поздней версии.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3