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