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