"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 첫 번째 요소에만 제한하지 않고 Golang에서 XML 배열의 모든 요소를 ​​검색하는 방법은 무엇입니까?

첫 번째 요소에만 제한하지 않고 Golang에서 XML 배열의 모든 요소를 ​​검색하는 방법은 무엇입니까?

2024-11-09에 게시됨
검색:452

How to Retrieve All Elements in an XML Array in Golang without Limiting to Just the First Element?

XML에서 배열 요소 비정렬화: 첫 번째 요소뿐만 아니라 모든 요소 검색

xml.Unmarshal( []byte(p.Val.Inner), &t), 첫 번째 요소만 검색되는 상황이 발생할 수 있습니다. 이 문제를 해결하려면 xml.Decoder를 활용하고 Decode 메서드를 반복적으로 호출하십시오.

모든 XML 배열 요소를 비정렬화하는 단계:

  1. 새 xml을 만듭니다. xml.NewDecoder(bytes.NewBufferString(VV))를 사용하는 디코더. 여기서 VV는 배열을 포함하는 XML 문자열입니다. 요소.
  2. 각 XML 요소를 처리하는 루프를 입력합니다.
  3. 대상 슬라이스 유형(예: HostSystemIdentificationInfo)의 변수 t를 선언합니다.
  4. d.Decode(&t를 호출합니다. ) 다음 XML 요소를 t 변수로 역마샬링합니다.
  5. 다음 XML 요소가 나올 때까지 2~4단계를 반복합니다. d.Decode(&t) 호출은 io.EOF를 반환합니다.

수정된 Golang 코드:

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>
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>Dell System</identifierValue>
  <identifierType>
    <label>OEM specific string</label>
    <summary>OEM specific string</summary>
    <key>OemSpecificString</key>
  </identifierType>
</HostSystemIdentificationInfo>
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>5[0000]</identifierValue>
  <identifierType>
    <label>OEM specific string</label>
    <summary>OEM specific string</summary>
    <key>OemSpecificString</key>
  </identifierType>
</HostSystemIdentificationInfo>
<HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
  <identifierValue>REDACTED</identifierValue>
  <identifierType>
    <label>Service tag</label>
    <summary>Service tag of the system</summary>
    <key>ServiceTag</key>
  </identifierType>
</HostSystemIdentificationInfo>`

샘플 출력:

[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
[{Dell System {OEM specific string OEM specific string OemSpecificString}}]
[{5[0000] {OEM specific string OEM specific string OemSpecificString}}]
[{REDACTED {Service tag Service tag of the system ServiceTag}}]

xml.Decoder를 사용하고 Decode를 반복적으로 호출하면 XML 배열 내의 모든 요소를 ​​성공적으로 검색하여 첫 번째 요소만 가져오는 문제를 해결할 수 있습니다. 요소.

릴리스 선언문 이 글은 1729695196에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3