Heim >Backend-Entwicklung >Golang >Wie kann ich XML effizient direkt in einen Go Map[string]string entmarshalieren?

Wie kann ich XML effizient direkt in einen Go Map[string]string entmarshalieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 03:15:11155Durchsuche

How Can I Efficiently Unmarshal XML Directly into a Go Map[string]string?

XML direkt in eine Karte entmarshalieren

Beim Umgang mit großen XML-Datensätzen kann der doppelte Konvertierungsprozess des Unmarshalings in eine Struktur und dann in eine Karte zeitaufwändig werden . In diesem Artikel wird ein effizienterer Ansatz zum direkten Unmarshalieren von XML in eine Karte untersucht.

Problem:

Das Ziel besteht darin, das folgende XML in einen Karten[string]string zu konvertieren , wobei die Schlüssel-Wert-Paare aus untergeordneten Elementen extrahiert werden:

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

Um dies zu erreichen, wird eine benutzerdefinierte Datenstruktur benötigt, die das implementiert Die xml.Unmarshaller-Schnittstelle ist erforderlich.

Lösung:

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: parse the inner structure

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

Durch die Implementierung der xml.Unmarshaller-Schnittstelle kann die benutzerdefinierte Datenstruktur das XML direkt in eine Karte entmarshalieren [string]string. Dadurch entfällt die Notwendigkeit einer zwischenzeitlichen Strukturkonvertierung, was zu einem effizienteren Unmarshaling-Prozess führt.

Teillösung und Demonstration:

Eine Teillösung, die den Ansatz demonstriert, ist verfügbar unter https://play.golang.org/p/7aOQ5mcH6zQ. Diese Lösung umfasst die benutzerdefinierte Datenstruktur und ein Beispiel-XML, um den Unmarshaling-Prozess zu demonstrieren.

Das obige ist der detaillierte Inhalt vonWie kann ich XML effizient direkt in einen Go Map[string]string entmarshalieren?. 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