> 백엔드 개발 > Golang > XML을 Go Map[string]string으로 효율적으로 역마샬링하려면 어떻게 해야 합니까?

XML을 Go Map[string]string으로 효율적으로 역마샬링하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-12-05 03:15:11
원래의
155명이 탐색했습니다.

How Can I Efficiently Unmarshal XML Directly into a Go Map[string]string?

XML을 맵으로 직접 역마샬링

대규모 XML 데이터 세트를 처리할 때 구조체로 역마샬링한 다음 맵으로 역마샬링하는 이중 변환 프로세스는 시간이 많이 걸릴 수 있습니다. . 이 기사에서는 XML을 지도로 직접 비정렬화하는 보다 효율적인 접근 방식을 살펴봅니다.

문제:

목표는 다음 XML을 지도[문자열]문자열로 변환하는 것입니다. , 여기서 키-값 쌍은 하위 요소에서 추출됩니다.

<classAccesses>
    <apexClass>AccountRelationUtility</apexClass>
    <enabled>true</enabled>
</classAccesses>
로그인 후 복사

이를 달성하려면 xml.Unmarshaller 인터페이스가 필요합니다.

해결책:

type classAccessesMap struct {
    m map[string]string
}

func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    c.m = map[string]string{}

    key := ""
    val := ""

    for {
        t, _ := d.Token()
        switch tt := t.(type) {

        // TODO: parse the inner structure

        case xml.StartElement:
            fmt.Println(">", tt)    

        case xml.EndElement:
            fmt.Println("<", tt)
            if tt.Name == start.Name {
                return nil
            }

            if tt.Name.Local == "enabled" {
                c.m[key] = val
            }
        }
    }
}
로그인 후 복사

xml.Unmarshaller 인터페이스를 구현하면 사용자 정의 데이터 구조가 XML을 맵으로 직접 역마샬링할 수 있습니다. [문자열]문자열. 이렇게 하면 중간 구조체 변환이 필요하지 않으므로 더 효율적인 역마샬링 프로세스가 수행됩니다.

부분 솔루션 및 데모:

접근 방식을 시연하는 부분 솔루션은 다음에서 사용할 수 있습니다. https://play.golang.org/p/7aOQ5mcH6zQ. 이 솔루션에는 역마샬링 프로세스를 보여주는 사용자 정의 데이터 구조와 샘플 XML이 포함되어 있습니다.

위 내용은 XML을 Go Map[string]string으로 효율적으로 역마샬링하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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