ホームページ >バックエンド開発 >Golang >XML を Go マップに直接アンマーシャリングする方法は?

XML を Go マップに直接アンマーシャリングする方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-10 18:08:11683ブラウズ

How to Directly Unmarshal XML into a Go Map?

XML をマップに直接アンマーシャリングする

問題:

最初に XML データをマップにアンマーシャリングする必要があります。構造体にアンマーシャリングしてから、その構造体をマップに変換しますが、大規模なシステムでは時間がかかりすぎます。 dataset.

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

必要なマップ:

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

解決策:

の xml.Unmarshaller インターフェイスを実装します。目的のマップを表すカスタム タイプ構造:

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

次に、xml.Unmarshal 関数を使用して、XML データをカスタム タイプに直接解析します:

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

fmt.Println(classAccesses.m)

以上がXML を Go マップに直接アンマーシャリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。