Go에서 속성 및 값이 포함된 XML 요소 역마샬링
XML 요소에는 속성과 값이 모두 포함되는 경우가 많습니다. 이러한 요소를 Golang 구조체로 성공적으로 역마샬링하려면 XMLName 및 ",chardata" 주석의 역할을 이해하는 것이 중요합니다.
XMLName 없이 구조체 정의
다음을 고려하세요. 제공된 XML:
<code class="xml"><thing prop="1"> 1.23 </thing> <thing prop="2"> 4.56 </thing></code>
XMLName 필드가 없는 해당 구조체는 다음과 같습니다.
<code class="go">type ThingElem struct { Prop int `xml:"prop,attr"` Value float64 `xml:",chardata"` }</code>
Prop에는 xml:"prop,attr"이라는 주석이 추가되어 해당 구조체가 사물 요소. 값에 xml:",chardata" 주석을 달아 요소의 내용을 문자열로 유지해야 함을 지정합니다.
XMLName 이해
XMLName을 사용하여 다음 작업을 수행할 수 있습니다. 구조체의 XML 태그 이름을 명시적으로 정의합니다. 우리의 경우 XML 태그 이름은 구조체 이름(ThingElem)과 일치하므로 추론됩니다. 따라서 이 시나리오에서는 XMLName이 필요하지 않습니다.
래퍼 구조체 사용
XML 구조가 더 복잡하거나 모호할 수 있는 경우 래퍼 구조체를 사용할 수 있습니다. 추가 컨텍스트를 제공합니다. 예를 들어 XML의 루트 요소 내에 여러 사물 요소가 있는 경우:
<code class="xml"><root> <thing prop="1"> 1.23 </thing> <thing prop="2"> 4.56 </thing> </root></code>
래퍼 구조체가 필요합니다.
<code class="go">type ThingWrapper struct { T ThingElem `xml:"thing"` }</code>
여기서 T는 thing 요소.
언마샬링 고려 사항
제공된 XML 데이터의 경우 요소 값의 공백을 고려해야 합니다. XML은 기본적으로 공백을 유지하지 않으므로 값을 잘라내거나 xml:",innerxml" 주석을 사용할 수 있습니다.
결과 구조체는 다음과 같이 역마샬링될 수 있습니다.
<code class="go">package main import ( "encoding/xml" "fmt" "strings" ) type Root struct { Things []Thing `xml:"thing"` } type Thing struct { Prop int `xml:"prop,attr"` Value float64 `xml:",chardata"` } func main() { data := ` <root> <thing prop="1"> 1.23 </thing> <thing prop="2"> 4.56 </thing> </root> ` thing := &Root{} err := xml.Unmarshal([]byte(strings.TrimSpace(data)), thing) if err != nil { fmt.Println(err) return } fmt.Println(thing) }</code>
위 내용은 Go에서 속성과 값을 사용하여 XML을 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!