> 백엔드 개발 > Golang > Go에서 동적 속성을 사용하여 XML을 어떻게 역마샬링할 수 있나요?

Go에서 동적 속성을 사용하여 XML을 어떻게 역마샬링할 수 있나요?

Patricia Arquette
풀어 주다: 2024-11-20 11:44:04
원래의
277명이 탐색했습니다.

How Can I Unmarshal XML with Dynamic Attributes in Go?

Go에서 동적 속성이 있는 XML 언마샬링

Go에서는 동적 속성이 있는 XML을 언마샬링하는 것이 어려울 수 있습니다. 그러나 최근 문제 3633이 해결되면서 이제 이 상황을 간단하고 효율적으로 처리할 수 있는 방법이 생겼습니다.

문제: 알 수 없는 속성

전통적으로 Go에서 XML을 역정렬화할 때 예상되는 XML 요소와 일치하도록 특정 필드가 있는 구조체를 정의합니다. 그러나 예측할 수 없는 속성이 포함된 XML 태그를 발견하면 어떻게 될까요?

해결책: ",any,attr" 태그

해결책은 ",any,attr"을 사용하는 데 있습니다. Go 구조체 정의에 " 태그를 추가하세요. 이 태그는 지정된 요소의 모든 속성을 xml.Attr 구조체의 조각으로 수집하도록 XML 역마샬러에 지시합니다.

다음 XML 조각을 고려하세요.

<TAG ATTR1="VALUE1" ATTR2="VALUE2" />
로그인 후 복사

이 XML을 Go 구조체로 역마샬링하려면 다음을 사용할 수 있습니다. 코드:

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
    var v struct {
        Attributes []xml.Attr `xml:",any,attr"`
    }

    data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />`

    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        panic(err)
    }
    fmt.Println(v)
}
로그인 후 복사

이 코드를 실행하면 v 구조체가 다음 데이터로 채워집니다.

{[]xml.Attr{
    {Name: {Local: "ATTR1"}, Value: "VALUE1"},
    {Name: {Local: "ATTR2"}, Value: "VALUE2"},
}}
로그인 후 복사

속성 슬라이스에는 각각 하나를 나타내는 두 개의 xml.Attr 구조체가 포함되어 있습니다. XML 태그의 속성을 선택합니다.

결론

",any,attr" 태그는 Go에서 동적 속성이 포함된 XML 태그를 역마샬링하는 강력하고 유연한 방법을 제공합니다. 이 기능을 활용하면 예측할 수 없는 XML 구조를 쉽게 처리하고 필요한 데이터를 사용자 정의 구조로 추출할 수 있습니다.

위 내용은 Go에서 동적 속성을 사용하여 XML을 어떻게 역마샬링할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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