Go では、動的属性を使用した XML のアンマーシャリングが困難な場合があります。しかし、問題 3633 の最近の解決により、この状況に対処する簡単かつ効率的な方法が登場しました。
従来、Go で XML をアンマーシャリングする場合は、予想される XML 要素に一致する特定のフィールドを含む構造体を定義します。しかし、予測できない属性を持つ XML タグに遭遇した場合はどうなりますか?
解決策は、",any,attr" を使用することです。 " タグを Go 構造体定義に追加します。このタグは、指定された要素のすべての属性を xml.Attr 構造体のスライスに収集するように XML アンマーシャラーに指示します。
次の XML スニペットを考えてみましょう:
<TAG ATTR1="VALUE1" ATTR2="VALUE2" />
この XML を Go 構造体にアンマーシャリングするには、次を使用できます。コード:
package main import ( "encoding/xml" "fmt" ) func main() { var v struct { Attributes []xml.Attr `xml:",any,attr"` } data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />` err := xml.Unmarshal([]byte(data), &v) if err != nil { panic(err) } fmt.Println(v) }
このコードを実行すると、v 構造体に次のデータが設定されます:
{[]xml.Attr{ {Name: {Local: "ATTR1"}, Value: "VALUE1"}, {Name: {Local: "ATTR2"}, Value: "VALUE2"}, }}
属性スライスには 2 つの xml.Attr 構造体が含まれており、それぞれが 1 つを表しますXML タグからの属性の説明。
「,any,attr」タグは、Go で動的属性を持つ XML タグをアンマーシャリングするための強力かつ柔軟な方法を提供します。この機能を利用すると、予測できない XML 構造を簡単に処理し、必要なデータをカスタム構造体に抽出できます。
以上がGo で動的属性を使用して XML をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。