XML データを中間構造体にアンマーシャリングし、その後マップに変換することは、大規模なデータ セットの場合に時間がかかる場合があります。このような場合、マップに直接アンマーシャリングする方が効率的です。
XML をマップに直接アンマーシャリングするには、xml.Unmarshaler インターフェイスを実装するカスタム タイプを作成できます。この型はアンマーシャリング プロセスを処理し、データをマップ[文字列]文字列に保存します。
例:
type classAccessesMap struct { m map[string]string } // UnmarshalXML implements the xml.Unmarshaler interface to unmarshal XML directly into the map. func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { c.m = map[string]string{} key := "" val := "" // Iteratively parse XML tokens. for { t, _ := d.Token() switch tt := t.(type) { // TODO: Handle the inner structure parsing here. case xml.StartElement: key = tt.Name.Local case xml.EndElement: // Store the key-value pair in the map when the end of the "enabled" element is reached. if tt.Name.Local == "enabled" { c.m[key] = val } // Return nil when the end of the "classAccesses" element is reached. if tt.Name == start.Name { return nil } } } }
使用法:
// Unmarshal the XML into the custom classAccessesMap type. var classAccessesMap classAccessesMap if err := xml.Unmarshal([]byte(xmlData), &classAccessesMap); err != nil { // Handle error } fmt.Println(classAccessesMap.m) // Prints the map containing the parsed data.
以上がXML を直接 Go マップに効率的にアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。