Maison > développement back-end > Golang > Comment capturer tous les éléments d'un tableau XML lors du démarshalage dans Golang ?

Comment capturer tous les éléments d'un tableau XML lors du démarshalage dans Golang ?

Patricia Arquette
Libérer: 2024-10-24 06:16:02
original
1007 Les gens l'ont consulté

How to Capture All Elements in an XML Array During Unmarshaling in Golang?

Désagrégation des tableaux XML pour capturer tous les éléments dans Golang

Problème :

Lors de la désorganisation d'un tableau XML dans une structure, seul le premier élément du tableau est récupéré.

Code original :

<code class="go">type HostSystemIdentificationInfo []struct {
    IdentiferValue string `xml:"identifierValue"`
    IdentiferType  struct {
        Label   string `xml:"label"`
        Summary string `xml:"summary"`
        Key     string `xml:"key"`
    } `xml:"identifierType"`
}

func unmarshal(xmlBytes []byte) (HostSystemIdentificationInfo, error) {
    var t HostSystemIdentificationInfo
    err := xml.Unmarshal(xmlBytes, &t)
    return t, err
}</code>
Copier après la connexion

Problème :

Ce qui précède Le code tente de décomposer une chaîne XML en une tranche de structures HostSystemIdentificationInfo, mais il ne capture que le premier élément du tableau.

Solution :

Pour capturer tous les éléments de le tableau XML, vous devez utiliser un décodeur XML et appeler sa méthode Decode plusieurs fois. Le code ci-dessous montre comment y parvenir :

<code class="go">// ... (same struct definitions as in the original code)

func unmarshal(xmlBytes []byte) (HostSystemIdentificationInfo, error) {
    dec := xml.NewDecoder(bytes.NewReader(xmlBytes))
    var t HostSystemIdentificationInfo
    for {
        err := dec.Decode(&t)
        if err == io.EOF {
            break
        }
        if err != nil {
            return nil, err
        }
    }
    return t, nil
}</code>
Copier après la connexion

Explication :

  • La fonction xml.NewDecoder crée un nouveau décodeur XML qui lit à partir d'un io .Reader.
  • La boucle for parcourt l'entrée XML, décodant chaque élément dans la tranche t.
  • La méthode dec.Decode(&t) décode l'élément XML suivant dans la variable t.
  • La boucle continue jusqu'à ce que la fin du fichier (EOF) soit atteinte, indiquant que tous les éléments ont été traités.

Utilisation :

<code class="go">xmlBytes = []byte(`
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>...</identifierValue>
  <identifierType>...</identifierType>
</HostSystemIdentificationInfo>
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>...</identifierValue>
  <identifierType>...</identifierType>
</HostSystemIdentificationInfo>
`)

t, err := unmarshal(xmlBytes)
if err != nil {
    log.Fatal(err)
}

fmt.Println(t) // All elements of the XML array will be printed</code>
Copier après la connexion

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