Heim >Backend-Entwicklung >Golang >Wie kann ich XML effizient direkt in eine Go-Map entmarshalieren?

Wie kann ich XML effizient direkt in eine Go-Map entmarshalieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-18 01:53:10263Durchsuche

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

XML direkt in eine Karte entmarshaling

Das Unmarshaling von XML-Daten in eine Zwischenstruktur, die dann in eine Karte konvertiert wird, kann bei großen Datensätzen zeitaufwändig sein. In solchen Fällen ist das direkte Unmarshaling in eine Karte ein effizienterer Ansatz.

Um XML direkt in eine Karte zu entmarshalieren, können Sie einen benutzerdefinierten Typ erstellen, der die xml.Unmarshaler-Schnittstelle implementiert. Dieser Typ übernimmt den Unmarshaling-Prozess und speichert die Daten in einem Map[string]string.

Beispiel:

type classAccessesMap struct {
    m map[string]string
}

// UnmarshalXML implements the xml.Unmarshaler interface to unmarshal XML directly into the map.
func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    c.m = map[string]string{}

    key := ""
    val := ""

    // Iteratively parse XML tokens.
    for {
        t, _ := d.Token()
        switch tt := t.(type) {

        // TODO: Handle the inner structure parsing here.

        case xml.StartElement:
            key = tt.Name.Local

        case xml.EndElement:
            // Store the key-value pair in the map when the end of the "enabled" element is reached.
            if tt.Name.Local == "enabled" {
                c.m[key] = val
            }

            // Return nil when the end of the "classAccesses" element is reached.
            if tt.Name == start.Name {
                return nil
            }
        }
    }
}

Verwendung:

// Unmarshal the XML into the custom classAccessesMap type.
var classAccessesMap classAccessesMap
if err := xml.Unmarshal([]byte(xmlData), &classAccessesMap); err != nil {
    // Handle error
}

fmt.Println(classAccessesMap.m) // Prints the map containing the parsed data.

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