问题:
将 XML 数组解组为结构体时,仅检索数组的第一个元素。
原始代码:
<code class="go">type HostSystemIdentificationInfo []struct { IdentiferValue string `xml:"identifierValue"` IdentiferType struct { Label string `xml:"label"` Summary string `xml:"summary"` Key string `xml:"key"` } `xml:"identifierType"` } func unmarshal(xmlBytes []byte) (HostSystemIdentificationInfo, error) { var t HostSystemIdentificationInfo err := xml.Unmarshal(xmlBytes, &t) return t, err }</code>
问题:
以上代码尝试将 XML 字符串解组为结构体 HostSystemIdentificationInfo 的切片,但它仅捕获数组的第一个元素。
解决方案:
捕获XML 数组,您需要使用 XML 解码器并多次调用其 Decode 方法。下面的代码演示了如何实现此目的:
<code class="go">// ... (same struct definitions as in the original code) func unmarshal(xmlBytes []byte) (HostSystemIdentificationInfo, error) { dec := xml.NewDecoder(bytes.NewReader(xmlBytes)) var t HostSystemIdentificationInfo for { err := dec.Decode(&t) if err == io.EOF { break } if err != nil { return nil, err } } return t, nil }</code>
说明:
用法:
<code class="go">xmlBytes = []byte(` <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo"> <identifierValue>...</identifierValue> <identifierType>...</identifierType> </HostSystemIdentificationInfo> <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo"> <identifierValue>...</identifierValue> <identifierType>...</identifierType> </HostSystemIdentificationInfo> `) t, err := unmarshal(xmlBytes) if err != nil { log.Fatal(err) } fmt.Println(t) // All elements of the XML array will be printed</code>
以上是如何在 Golang 解组过程中捕获 XML 数组中的所有元素?的详细内容。更多信息请关注PHP中文网其他相关文章!