Maison  >  Article  >  développement back-end  >  Dois-je utiliser XMLName pour désorganiser les éléments XML avec des attributs et des valeurs à virgule flottante ?

Dois-je utiliser XMLName pour désorganiser les éléments XML avec des attributs et des valeurs à virgule flottante ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-23 22:52:02729parcourir

Do I Need to Use XMLName for Unmarshaling XML Elements with Attributes and Floating Point Values?

Désassembler des éléments XML avec des attributs et des valeurs à virgule flottante

Pour décomplexer un élément XML avec un attribut et une valeur à virgule flottante, vous pouvez définir une structure Go avec les champs correspondants. Cependant, il y a quelques considérations concernant l'utilisation de la propriété xml.Name.

Dans l'élément XML fourni :

<code class="xml"><thing prop="1">
  1.23
</thing></code>

La structure ThingElem doit avoir les propriétés suivantes :

  • Prop : Ce champ correspond à l'attribut prop et son type est int.
  • Valeur : Ce champ correspond à la valeur à virgule flottante 1,23.

Option 1 : Avec XMLName

Dans cette option, vous pouvez ajouter un champ xml.Name à la structure ThingElem. Ce champ est généralement utilisé lorsque la structure XML est ambiguë. Dans ce cas, ce n'est pas nécessaire car il est clair que la struct correspond à l'élément thing.

<code class="go">type ThingElem struct {
    XMLName xml.Name `xml:"thing"` // Do I even need this?
    Prop    int      `xml:"prop,attr"`
    Value   float    // ???
}</code>

Option 2 : Sans XMLName

Puisqu'il n'y a pas d'ambiguïté dans la structure XML, vous pouvez omettre le champ xml.Name.

<code class="go">type ThingElem struct {
    Prop  int   `xml:"prop,attr"`
    Value float // ???
}</code>

Désagrégation des valeurs à virgule flottante

Pour décomplexer correctement la valeur à virgule flottante, vous devez assurez-vous qu'il n'y a pas d'espaces dans le XML. Dans votre exemple, la valeur est 1,23, mais il est recommandé de supprimer les espaces et de la stocker sous la forme 1,23.

Désagrégation des données imbriquées

Vous pouvez également désorganiser les données imbriquées en définir une structure wrapper. Par exemple, le XML contient plusieurs éléments d'objet. Pour les désorganiser, vous devez définir une structure ThingWrapper :

<code class="go">type ThingWrapper struct {
    T ThingElem `xml:"thing"`
}</code>

Exemple de code complet

Voici un exemple de code complet qui désorganise les données XML fournies :

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
)

type Root struct {
    Things []Thing `xml:"thing"`
}

type Thing struct {
    Prop  int     `xml:"prop,attr"`
    Value float64 `xml:",chardata"`
}

func main() {
    data := `<root><thing prop="1">1.23</thing><thing prop="2">4.56</thing></root>`
    thing := &Root{}
    err := xml.Unmarshal([]byte(data), thing)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(thing)
}</code>

Ce code imprimera les données XML analysées, y compris l'attribut prop et les valeurs à virgule flottante.

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