Heim >Backend-Entwicklung >Golang >Wie entmarshaliere ich XML direkt in eine Go-Map?

Wie entmarshaliere ich XML direkt in eine Go-Map?

Linda Hamilton
Linda HamiltonOriginal
2024-12-10 18:08:11838Durchsuche

How to Directly Unmarshal XML into a Go Map?

XML direkt in eine Karte entpacken

Problem:

Sie müssen XML-Daten nicht zuerst in eine Karte entpacken Unmarshalling in eine Struktur und anschließendes Konvertieren der Struktur in eine Karte, was für eine große Struktur zu viel Zeit in Anspruch nimmt Datensatz.

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

Gewünschte Karte:

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

Lösung:

Implementieren Sie die xml.Unmarshaller-Schnittstelle für ein benutzerdefinierter Typ, der die gewünschte Kartenstruktur darstellt:

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

Dann, Verwenden Sie die Funktion xml.Unmarshal, um die XML-Daten direkt in den benutzerdefinierten Typ zu analysieren:

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

fmt.Println(classAccesses.m)

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich XML direkt in eine Go-Map?. 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