Maison >développement back-end >Golang >Comment désorganiser les attributs XML avec des attributs inconnus dans Go ?

Comment désorganiser les attributs XML avec des attributs inconnus dans Go ?

DDD
DDDoriginal
2024-11-25 02:30:10150parcourir

How to Unmarshal XML Attributes with Unknown Attributes in Go?

Désagrégation des attributs XML avec des attributs inconnus dans Go

Dans Go, le package encoding/xml nous permet de rassembler et de désorganiser les données XML dans et à partir des structures de données Go. Cependant, par défaut, il ne prend en charge que la désorganisation des balises XML avec des attributs fixes connus à l'avance.

Attributs dynamiques en XML

Dans certains cas, les documents XML peuvent avoir des balises avec des attributs dynamiques qui ne sont pas connus à l’avance. Cela peut poser un défi lors de la désorganisation de ces données XML dans des structures Go.

Désorganisation des attributs dynamiques

Depuis fin 2017, Go prend en charge la désorganisation des balises XML avec des attributs dynamiques à l'aide de l'option xml:",any,attr" directive de balise. Cette directive demande au démarshaler de collecter tous les attributs dans la tranche xml.Attr.

Exemple :

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
    var v struct {
        Attributes []xml.Attr `xml:",any,attr"`
    }

    data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />`

    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        panic(err)
    }
    fmt.Println(v)
}

Lorsque le code ci-dessus est exécuté, il imprimera :

{
  Attributes: [
    {Name:ATTR1 Value:VALUE1}
    {Name:ATTR2 Value:VALUE2}
  ]
}

Remarque :

Le La directive xml:",any,attr" ne collecte pas les attributs des balises imbriquées. Si vous devez collecter des attributs à partir de balises imbriquées, vous devrez créer un décodeur XML personnalisé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn