Maison > développement back-end > Golang > 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
Libérer: 2024-10-23 22:52:02
original
809 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal