Maison  >  Article  >  développement back-end  >  Comment désorganiser des éléments XML avec des attributs et des valeurs à virgule flottante dans Go ?

Comment désorganiser des éléments XML avec des attributs et des valeurs à virgule flottante dans Go ?

DDD
DDDoriginal
2024-10-23 18:38:02823parcourir

How to Unmarshal XML Elements with Attributes and Floating-Point Values in Go?

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

Pour désorganiser un élément XML comme celui fourni, avec un attribut et une valeur à virgule flottante, nous devons définir une structure Go qui correspond à la structure XML.

Définition de la structure

Considérons les deux définitions de structure données dans le question :

Première définition :

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

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

Deuxième définition :

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

Aborder les options :

  • Propriété XMLName : La propriété XMLName doit généralement être utilisée pour spécifier le nom de l'élément XML pour la structure, nous n'en avons donc pas besoin dans ce cas puisque le nom de l'élément est explicitement spécifié dans l'annotation xml:"thing".
  • Représentation de la valeur flottante : Le champ flottant de la première structure ne peut pas être désorganisé correctement car les valeurs à virgule flottante dans le XML contiennent des espaces. Nous devons supprimer ces espaces avant de procéder au démarshalage.
  • Wrapper ou intégration directe : La deuxième définition de structure utilise un wrapper (ThingWrapper) pour représenter l'élément XML. Cela n'est pas nécessaire puisque la structure ThingElem représente déjà avec précision la structure XML.

Solution finale :

<code class="go">type Thing struct {
    Prop  int     `xml:"prop,attr"`
    Value float64 `xml:",chardata"`
}

type Root struct {
    Things []Thing `xml:"thing"`
}</code>

Dans cette solution, la structure Thing représente un seul élément XML, et la structure racine est un conteneur qui contient une tranche de structures Thing pour désassembler l'élément racine XML.

Exemple de code :

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
)

const xmlData = `
<root>
<thing prop="1">1.23</thing>
<thing prop="2">4.56</thing>
</root>
`

func main() {
    root := &Root{}
    if err := xml.Unmarshal([]byte(xmlData), root); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(root.Things)
}</code>

Ce code montre comment désorganiser l'élément XML dans une structure Go, y compris la suppression des espaces des 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