문제:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!