Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengambil Semua Elemen dalam Tatasusunan XML di Golang tanpa Mengehadkan Hanya Elemen Pertama?

Bagaimana untuk Mengambil Semua Elemen dalam Tatasusunan XML di Golang tanpa Mengehadkan Hanya Elemen Pertama?

DDD
DDDasal
2024-10-24 06:02:30732semak imbas

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

Unmarshal Array Elements dalam XML: Dapatkan Semua Elemen, Bukan Sekadar Yang Pertama

Apabila unmarshal array XML di Golang menggunakan xml.Unmarshal( []bait(p.Val.Inner), &t), anda mungkin menghadapi situasi di mana hanya elemen pertama sedang diambil. Untuk menyelesaikan isu ini, gunakan xml.Decoder dan gunakan kaedah Nyahkodnya berulang kali.

Langkah-Langkah untuk Menyahkawal Semua Elemen Tatasusunan XML:

  1. Buat xml baharu. Penyahkod menggunakan xml.NewDecoder(bytes.NewBufferString(VV)), dengan VV ialah rentetan XML yang mengandungi elemen tatasusunan.
  2. Masukkan gelung untuk memproses setiap elemen XML:
  3. Isytiharkan pembolehubah t daripada jenis kepingan sasaran (cth., HostSystemIdentificationInfo).
  4. Panggil d.Decode(&t) untuk menyahmarshal elemen XML seterusnya ke dalam pembolehubah t.
  5. Ulang langkah 2-4 sehingga d. Nyahkod(&t) panggilan mengembalikan io.EOF.

Kod Golang Diubah Suai:

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

Sampel Output:

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

Dengan menggunakan xml.Decoder dan berulang kali menggunakan Decode, anda boleh berjaya mendapatkan semula semua elemen dalam tatasusunan XML, menyelesaikan isu hanya mendapatkan elemen pertama.

Atas ialah kandungan terperinci Bagaimana untuk Mengambil Semua Elemen dalam Tatasusunan XML di Golang tanpa Mengehadkan Hanya Elemen Pertama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn