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

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

Linda Hamilton
リリース: 2024-12-10 18:08:11
オリジナル
692 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート