Heim > Backend-Entwicklung > Golang > Kann XML direkt in eine Go-Map entmarhaled werden, um die Leistung zu verbessern?

Kann XML direkt in eine Go-Map entmarhaled werden, um die Leistung zu verbessern?

Patricia Arquette
Freigeben: 2024-12-03 13:33:14
Original
202 Leute haben es durchsucht

Can XML be Unmarhaled Directly into a Go Map to Improve Performance?

XML direkt in eine Karte entmarshallen

Problem:

XML in eine Struktur entmarshallen und dann in eine Karte konvertieren ist bei großen Datensätzen zeitaufwändig. Gibt es eine Möglichkeit, direkt in eine Karte zu entmarshalieren?

XML:

<classAccesses>
    <apexClass>AccountRelationUtility</apexClass>
    <enabled>true</enabled>
</classAccesses>
Nach dem Login kopieren

Aktuelle Struktur:

type classAccesses struct {
    ApexClass string `xml:"apexClass"`
    Enabled   string `xml:"enabled"`
}

type diffs struct {
    ClassAccesses []classAccesses `xml:"classAccesses"`
}
Nach dem Login kopieren

Erwünscht Karte:

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

Lösung:

Implementieren Sie die xml.Unmarshaller-Schnittstelle, um Daten direkt in einem Map[string]string zu marsalieren.

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) {

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

Teillösung:

Besuch https://play.golang.org/p/7aOQ5mcH6zQ für eine teilweise Implementierung.

Das obige ist der detaillierte Inhalt vonKann XML direkt in eine Go-Map entmarhaled werden, um die Leistung zu verbessern?. 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