Wie erfasst man alle Elemente in einem XML-Array beim Unmarshaling in Golang?

Patricia Arquette
Freigeben: 2024-10-24 06:16:02
Original
900 Leute haben es durchsucht

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

Unmarshaling von XML-Arrays, um alle Elemente in Golang zu erfassen

Problem:

Beim Unmarshaling eines XML-Arrays in eine Struktur, Es wird nur das erste Element des Arrays abgerufen.

Originalcode:

<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>
Nach dem Login kopieren

Problem:

Das Obige Der Code versucht, eine XML-Zeichenfolge in ein Segment der Strukturen HostSystemIdentificationInfo zu entmarshalieren, erfasst jedoch nur das erste Element des Arrays.

Lösung:

So erfassen Sie alle Elemente von Um das XML-Array zu verwenden, müssen Sie einen XML-Decoder verwenden und dessen Decode-Methode mehrmals aufrufen. Der folgende Code zeigt, wie dies erreicht wird:

<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>
Nach dem Login kopieren

Erklärung:

  • Die xml.NewDecoder-Funktion erstellt einen neuen XML-Decoder, der von einem io liest .Reader.
  • Die for-Schleife durchläuft die XML-Eingabe und dekodiert jedes Element in das t-Slice.
  • Die dec.Decode(&t)-Methode dekodiert das nächste XML-Element in die Variable t.
  • Die Schleife wird fortgesetzt, bis das Dateiende (EOF) erreicht ist, was anzeigt, dass alle Elemente verarbeitet wurden.

Verwendung:

<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>
Nach dem Login kopieren

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

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!