Go에서 XML 배열의 첫 번째 요소만 언마샬링하는 것을 방지하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-24 06:29:02
원래의
535명이 탐색했습니다.

How to Avoid Unmarshaling Only the First Element of an XML Array in Go?

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

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!