"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como recuperar todos os elementos em um array XML em Golang sem se limitar apenas ao primeiro elemento?

Como recuperar todos os elementos em um array XML em Golang sem se limitar apenas ao primeiro elemento?

Publicado em 2024-11-09
Navegar:218

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

Desempacotar elementos de array em XML: recuperar todos os elementos, não apenas o primeiro

Ao desempacotar um array XML em Golang usando xml.Unmarshal( []byte(p.Val.Inner), &t), você pode encontrar uma situação em que apenas o primeiro elemento está sendo recuperado. Para resolver esse problema, utilize xml.Decoder e invoque repetidamente seu método Decode.

Etapas para desempacotar todos os elementos da matriz XML:

  1. Crie um novo xml. Decodificador usando xml.NewDecoder(bytes.NewBufferString(VV)), onde VV é a string XML que contém a matriz elementos.
  2. Insira um loop para processar cada elemento XML:
  3. Declare uma variável t do tipo de fatia de destino (por exemplo, HostSystemIdentificationInfo).
  4. Chame d.Decode(&t ) para desempacotar o próximo elemento XML na variável t.
  5. Repita as etapas 2 a 4 até que a chamada d.Decode(&t) retorne io.EOF.

Código Golang modificado:

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

Exemplo de saída:

[{ 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}}]

Ao usar xml.Decoder e invocar Decode repetidamente, você pode recuperar com sucesso todos os elementos dentro da matriz XML, resolvendo o problema de obter apenas o primeiro elemento.

Declaração de lançamento Este artigo foi reimpresso em: 1729695196 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3