Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menghapuskan XML secara Terus ke dalam Peta Go?

Bagaimana untuk Menghapuskan XML secara Terus ke dalam Peta Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-10 18:08:11796semak imbas

How to Directly Unmarshal XML into a Go Map?

Unmarshal XML Terus ke dalam Peta

Masalah:

Anda perlu menyahmarshal data XML ke dalam peta dan bukannya pertama unmarshalling menjadi struct dan kemudian menukar struct menjadi peta, yang mengambil terlalu banyak masa untuk set data.

<classAccesses>
    <apexClass>AccountRelationUtility</apexClass>
    <enabled>true</enabled>
</classAccesses>

Peta Diingini:

map[string]string{
    "ApexClass": "enabled"
}

Penyelesaian:

Laksanakan antara muka xml.Unmarshaller untuk jenis tersuai yang mewakili struktur peta yang diingini:

type classAccessesMap struct {
    m map[string]string
}

func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    c.m = map[string]string{}

    key := ""
    val := ""

    for {
        t, _ := d.Token()
        switch tt := t.(type) {

        // TODO: ...

        case xml.StartElement:
            fmt.Println(">", tt)

        case xml.EndElement:
            fmt.Println("<", tt)
            if tt.Name == start.Name {
                return nil
            }

            if tt.Name.Local == "enabled" {
                c.m[key] = val
            }
        }
    }
}

Kemudian, gunakan fungsi xml.Unmarshal untuk menghuraikan data XML terus ke dalam jenis tersuai:

var classAccesses classAccessesMap
if err := xml.Unmarshal(data, &classAccesses); err != nil {
    // Handle error
}

fmt.Println(classAccesses.m)

Atas ialah kandungan terperinci Bagaimana untuk Menghapuskan XML secara Terus ke dalam Peta Go?. 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