Go で XML 配列をアンマーシャルする: 最初の要素のみを取得する
エンタープライズ環境で普及しているデータ形式である XML は、多くの場合複雑な形式で表現されます。 、入れ子構造。 Go は多用途のプログラミング言語であり、堅牢な XML アンマーシャリング機能を提供します。ただし、XML 配列のアンマーシャリングの微妙な違いを理解することが重要になる場合があります。
特定のシナリオでは、開発者は XML 配列をアンマーシャリングするときに問題が発生しました。コードは最初の要素のアンマーシャリングに成功しましたが、配列全体の取得に失敗しました。
問題:
type HostSystemIdentificationInfo []struct { IdentiferValue string `xml:"identifierValue"` IdentiferType struct { Label string `xml:"label"` Summary string `xml:"summary"` Key string `xml:"key"` } `xml:"identifierType"` } func main() { var t HostSystemIdentificationInfo err := xml.Unmarshal([]byte(vv), &t) if err != nil { log.Fatal(err) } fmt.Println(t) } const vv = ` <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo"> <identifierValue>unknown</identifierValue> <identifierType> <label>Asset Tag</label> <summary>Asset tag of the system</summary> <key>AssetTag</key> </identifierType> </HostSystemIdentificationInfo> `
期待される出力:
[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
実際の出力:
[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
解決策:
この問題は、 XML アンマーシャリング プロセス。 XML 配列をアンマーシャリングする場合、データを受け取るためのポインターとしてターゲット構造体を単純に指定することはできません。代わりに、xml.Decoder を作成し、その Decode メソッドを繰り返し呼び出す必要があります。
package main import ( "bytes" "encoding/xml" "fmt" "io" "log" ) type HostSystemIdentificationInfo struct { IdentiferValue string `xml:"identifierValue"` IdentiferType struct { Label string `xml:"label"` Summary string `xml:"summary"` Key string `xml:"key"` } `xml:"identifierType"` } func main() { d := xml.NewDecoder(bytes.NewBufferString(vv)) for { var t HostSystemIdentificationInfo err := d.Decode(&t) if err == io.EOF { break } if err != nil { log.Fatal(err) } fmt.Println(t) } } const vv = ` <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo"> <identifierValue>unknown</identifierValue> <identifierType> <label>Asset Tag</label> <summary>Asset tag of the system</summary> <key>AssetTag</key> </identifierType> </HostSystemIdentificationInfo> `
xml.Decoder を利用すると、XML 配列内の各要素を正しく反復し、個別にアンマーシャリングできます。
したがって、これらの手順に従うことで、開発者は Go で XML 配列を効果的にアンマーシャリングし、複雑なデータ構造を効率的に解析できるようになります。
以上がGo で XML 配列の最初の要素だけをアンマーシャリングしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。