Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-10-23 18:38:02
original
822 Les gens l'ont consulté

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

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

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

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!