>백엔드 개발 >Golang >속성 및 부동 소수점 값이 포함된 XML 요소를 Go 구조체로 역정렬화하는 방법은 무엇입니까?

속성 및 부동 소수점 값이 포함된 XML 요소를 Go 구조체로 역정렬화하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-24 02:40:29966검색

How to Unmarshal XML Elements with Attributes and Floating-Point Values into Go Structs?

XML 요소를 Go 구조체로 역마샬링

속성과 부동 소수점 값을 포함하는 다음 XML 요소를 고려하세요.

<thing prop="1">
  1.23
</thing>
<thing prop="2">
  4.56
</thing>

이 XML을 Go 구조체로 역마샬링하려면 두 가지 설계 접근 방식을 사용할 수 있습니다.

XMLName 속성 사용:

<code class="go">type ThingElem struct {
    XMLName xml.Name `xml:"thing"`
    Prop    int      `xml:"prop,attr"`
    Value   float64 // ???
}</code>

이 경우 에서 XMLName 필드는 구조체가 "사물" XML 요소를 나타냄을 지정하는 데 사용됩니다. 그러나 구조체 정의에 이 필드를 항상 포함할 필요는 없습니다.

XMLName 속성 없음:

<code class="go">type ThingElem struct {
    Prop  int   `xml:"prop,attr"`
    Value float64 // ???
}

type ThingWrapper struct {
    T ThingElem `xml:"thing"`
}</code>

이 접근 방식에서는 ThingElem 구조체가 내에서 역마샬링됩니다. 래퍼 구조체 ThingWrapper. 래퍼 구조체의 xml:"thing" 태그는 ThingElem이 "thing" XML 요소를 나타내야 함을 지정합니다.

값 필드 유형 결정:

값 필드에서는 XML 요소에 부동 소수점 값을 나타내는 문자 데이터(텍스트 콘텐츠)가 포함되어 있다는 점에 유의하는 것이 중요합니다. 이를 올바르게 역마샬링하려면 다음과 같이 변경해야 합니다.

값에서 공백 제거:

XML 데이터에는 부동 소수점 값 내에 공백이 포함되어 있습니다. 마샬링을 해제하기 전에 이러한 공백을 제거해야 합니다.

",chardata" 주석 사용:

XML 태그의 내용은 다음의 ",chardata" 주석을 사용하여 참조할 수 있습니다. 구조체 필드 정의:

<code class="go">Value float64 `xml:",chardata"`</code>

이러한 수정 사항을 통합하고 XML 데이터에서 공백이 잘리도록 하면 위에서 언급한 디자인 접근 방식 중 하나를 사용하여 지정된 XML을 Go 구조체로 성공적으로 역마샬링할 수 있습니다.

위 내용은 속성 및 부동 소수점 값이 포함된 XML 요소를 Go 구조체로 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.