ホームページ > バックエンド開発 > Golang > XML を直接 Go Map[string]string に効率的にアンマーシャリングするにはどうすればよいですか?

XML を直接 Go Map[string]string に効率的にアンマーシャリングするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-05 03:15:11
オリジナル
158 人が閲覧しました

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

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

大規模な XML データセットを扱う場合、構造体にアンマーシャリングしてからマップにアンマーシャリングする二重変換プロセスに時間がかかる可能性があります。 。この記事では、XML をマップに直接アンマーシャルするためのより効率的なアプローチを検討します。

問題:

目標は、次の XML をマップ[文字列]文字列に変換することです。ここで、キーと値のペアは子要素から抽出されます:

<classAccesses>
    <apexClass>AccountRelationUtility</apexClass>
    <enabled>true</enabled>
</classAccesses>
ログイン後にコピー

これを実現するには、 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: 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
            }
        }
    }
}
ログイン後にコピー

xml.Unmarshaller インターフェイスを実装することにより、カスタム データ構造は XML をマップに直接アンマーシャリングできます。 [文字列]文字列。これにより、中間の構造体変換の必要性がなくなり、より効率的なアンマーシャリング プロセスが実現します。

部分的な解決策とデモ:

このアプローチをデモする部分的な解決策は、次の場所で入手できます。 https://play.golang.org/p/7aOQ5mcH6zQ。このソリューションには、アンマーシャリング プロセスを示すカスタム データ構造とサンプル XML が含まれています。

以上がXML を直接 Go Map[string]string に効率的にアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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