Maison  >  Article  >  développement back-end  >  Comment éviter de démarshaler uniquement le premier élément d'un tableau XML dans Go ?

Comment éviter de démarshaler uniquement le premier élément d'un tableau XML dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-24 06:29:02535parcourir

How to Avoid Unmarshaling Only the First Element of an XML Array in Go?

Démarrer un tableau XML dans Go : obtenir uniquement le premier élément

XML, un format de données répandu dans les environnements d'entreprise, est souvent représenté sous forme complexe , structures imbriquées. Go, un langage de programmation polyvalent, offre de robustes capacités de démarshaling XML. Cependant, comprendre les nuances de la désorganisation des tableaux XML peut s'avérer crucial.

Dans un scénario particulier, un développeur a rencontré un problème lors de la désorganisation d'un tableau XML. Le code a réussi à désassembler le premier élément mais n'a pas réussi à récupérer l'intégralité du tableau.

Le problème :

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() {
    var t HostSystemIdentificationInfo
    err := xml.Unmarshal([]byte(vv), &t)
    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>
`

Le résultat attendu :

[{ unknown {Asset Tag Asset tag of the system AssetTag}}]

Le résultat réel :

[{ unknown {Asset Tag Asset tag of the system AssetTag}}]

Solution :

Le problème survient en raison d'un malentendu sur le Processus de démarshaling XML. Lors du démarshaling d'un tableau XML, vous ne pouvez pas simplement fournir la structure cible comme pointeur pour recevoir les données. Au lieu de cela, vous devez créer un xml.Decoder et appeler à plusieurs reprises sa méthode Decode.

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>
`

En utilisant xml.Decoder, vous pouvez parcourir correctement chaque élément du tableau XML et les désorganiser individuellement.

Par conséquent, en suivant ces étapes, les développeurs peuvent désassembler efficacement les tableaux XML dans Go, leur permettant d'analyser efficacement des structures de données complexes.

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