"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo recuperar todos los elementos de una matriz XML en Golang sin limitarse solo al primer elemento?

¿Cómo recuperar todos los elementos de una matriz XML en Golang sin limitarse solo al primer elemento?

Publicado el 2024-11-09
Navegar:382

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

Desclasificar elementos de matriz en XML: recuperar todos los elementos, no solo el primero

Al desclasificar una matriz XML en Golang usando xml.Unmarshal( []byte(p.Val.Inner), &t), puede encontrarse con una situación en la que solo se recupera el primer elemento. Para resolver este problema, utilice xml.Decoder e invoque repetidamente su método Decode.

Pasos para desarmar todos los elementos de la matriz XML:

  1. Cree un nuevo xml. Decodificador que utiliza xml.NewDecoder(bytes.NewBufferString(VV)), donde VV es la cadena XML que contiene los elementos de la matriz.
  2. Ingrese un bucle para procesar cada elemento XML:
  3. Declare una variable t del tipo de segmento de destino (por ejemplo, HostSystemIdentificationInfo).
  4. Llame a d.Decode(&t) para descomponer el siguiente elemento XML en la variable t.
  5. Repita los pasos 2 a 4 hasta que d. La llamada de decodificación (&t) devuelve 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>`

Salida de muestra:

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

Al usar xml.Decoder e invocar repetidamente Decode, puede recuperar con éxito todos los elementos dentro de la matriz XML, resolviendo el problema de obtener solo el primero. elemento.

Declaración de liberación Este artículo se reimprime en: 1729695196 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3