"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment récupérer tous les éléments d'un tableau XML dans Golang sans se limiter au premier élément ?

Comment récupérer tous les éléments d'un tableau XML dans Golang sans se limiter au premier élément ?

Publié le 2024-11-09
Parcourir:835

How to Retrieve All Elements in an XML Array in Golang without Limiting to Just the First Element?

Démarshaler les éléments d'un tableau en XML : récupérer tous les éléments, pas seulement le premier

Lors du démarshalage d'un tableau XML dans Golang à l'aide de xml.Unmarshal( []byte(p.Val.Inner), &t), vous pouvez rencontrer une situation dans laquelle seul le premier élément est récupéré. Pour résoudre ce problème, utilisez xml.Decoder et invoquez à plusieurs reprises sa méthode Decode.

Étapes pour désorganiser tous les éléments du tableau XML :

  1. Créez un nouveau fichier XML. Décodeur utilisant xml.NewDecoder(bytes.NewBufferString(VV)), où VV est la chaîne XML contenant le tableau éléments.
  2. Entrez une boucle pour traiter chaque élément XML :
  3. Déclarez une variable t du type de tranche cible (par exemple, HostSystemIdentificationInfo).
  4. Appelez d.Decode(&t ) pour désorganiser l'élément XML suivant dans la variable t.
  5. Répétez les étapes 2 à 4 jusqu'à ce que l'appel d.Decode(&t) renvoie io.EOF.

Code Golang modifié :

package main

import (
    "bytes"
    "encoding/xml"
    "fmt"
    "io"
    "log"
)

type HostSystemIdentificationInfo []struct {
    IdentiferValue string `xml:"identifierValue"`
    IdentiferType  struct {
        Label   string `xml:"label"`
        Summary string `xml:"summary"`
        Key     string `xml:"key"`
    } `xml:"identifierType"`
}

func main() {
    d := xml.NewDecoder(bytes.NewBufferString(VV))
    for {
        var t HostSystemIdentificationInfo
        err := d.Decode(&t)
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(t)
    }
}

const VV = `<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue> unknown</identifierValue>
  <identifierType>
    <label>Asset Tag</label>
    <summary>Asset tag of the system</summary>
    <key>AssetTag</key>
  </identifierType>
</HostSystemIdentificationInfo>
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>Dell System</identifierValue>
  <identifierType>
    <label>OEM specific string</label>
    <summary>OEM specific string</summary>
    <key>OemSpecificString</key>
  </identifierType>
</HostSystemIdentificationInfo>
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>5[0000]</identifierValue>
  <identifierType>
    <label>OEM specific string</label>
    <summary>OEM specific string</summary>
    <key>OemSpecificString</key>
  </identifierType>
</HostSystemIdentificationInfo>
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>REDACTED</identifierValue>
  <identifierType>
    <label>Service tag</label>
    <summary>Service tag of the system</summary>
    <key>ServiceTag</key>
  </identifierType>
</HostSystemIdentificationInfo>`

Exemple de sortie :

[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
[{Dell System {OEM specific string OEM specific string OemSpecificString}}]
[{5[0000] {OEM specific string OEM specific string OemSpecificString}}]
[{REDACTED {Service tag Service tag of the system ServiceTag}}]

En utilisant xml.Decoder et en appelant Decode à plusieurs reprises, vous pouvez récupérer avec succès tous les éléments du tableau XML, résolvant ainsi le problème de l'obtention uniquement du premier élément.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729695196. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3