Heim >Backend-Entwicklung >Golang >Wie rufe ich alle Array-Elemente beim XML-Unmarshaling in Go ab?

Wie rufe ich alle Array-Elemente beim XML-Unmarshaling in Go ab?

DDD
DDDOriginal
2024-10-24 00:16:01547Durchsuche

How to Retrieve All Array Elements During XML Unmarshaling in Go?

XML-Array-Unmarshaling in Go: Alle Elemente erfassen

Im bereitgestellten Code tritt das Problem beim Unmarshaling einer XML-Zeichenfolge auf, die mehrere Instanzen von enthält ein bestimmter Strukturtyp. Die aktuelle Implementierung ruft nur das erste Element des Arrays ab.

Um diese Einschränkung zu überwinden, ziehen Sie den folgenden Ansatz in Betracht:

Verwendung eines XML-Decoders

Durch die Verwendung eines xml.Decoder können wir die XML-Daten durchlaufen und alle Instanzen der Struktur abrufen. Hier ist der aktualisierte Code:

<code class="go">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>`</code>

Spielen mit Go:

[Playground Link](http://play.golang.org/p/c7-E_Afe -3)

Das obige ist der detaillierte Inhalt vonWie rufe ich alle Array-Elemente beim XML-Unmarshaling in Go ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn