«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как демаршалировать XML с динамическими атрибутами в Go?

Как демаршалировать XML с динамическими атрибутами в Go?

Опубликовано 18 ноября 2024 г.
Просматривать:958

How to Unmarshal XML with Dynamic Attributes in Go?

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