"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como desempacotar XML com atributos dinâmicos em Go?

Como desempacotar XML com atributos dinâmicos em Go?

Publicado em 2024-11-18
Navegar:442

How to Unmarshal XML with Dynamic Attributes in Go?

Golang: desempacotando XML com atributos dinâmicos

Introdução:
No Go, encoding/xml fornece uma maneira eficiente e versátil de lidar com dados XML. No entanto, ao lidar com elementos XML que possuem atributos dinâmicos, a desempacotamento torna-se um desafio devido ao número desconhecido e aos tipos de atributos presentes.

Pergunta:
Como você pode desempacotar tags XML com atributos dinâmicos no Go quando você não prevê os atributos exatos que serão encontrados?

Resposta:
Antes do final de 2017, isso não era suportado diretamente na desempacotamento XML do Go. No entanto, com os avanços no pacote encoding/xml, essa funcionalidade foi implementada.

Para desempacotar tags XML com atributos dinâmicos, você pode usar a seguinte sintaxe:

type MyStruct struct {
    Attributes []xml.Attr `xml:",any,attr"`
}

Aqui está um exemplo para ilustrar como funciona:

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)
}

Neste exemplo, o tipo MyStruct define um campo chamado Atributos. A tag xml:"...,any,attr" instrui o desempacotador a atribuir quaisquer atributos XML a este campo como fatias xml.Attr.

Quando o desempacotador encontra os dados XML fornecidos na variável de dados, ele desempacota com êxito os atributos desconhecidos (ATTR1 e ATTR2) no campo Atributos da estrutura v. Isso permite o tratamento dinâmico de elementos XML com conjuntos de atributos variados.

Observe que esse recurso requer Go versão 1.9 ou posterior.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3