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

Wie entmarshaliere ich XML direkt in eine Go-Map?

Linda Hamilton
Freigeben: 2024-12-10 18:08:11
Original
729 Leute haben es durchsucht

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

Gewünschte Karte:

map[string]string{
    "ApexClass": "enabled"
}
Nach dem Login kopieren

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

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

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!

Quelle:php.cn
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