XML을 지도로 직접 비정렬화
문제:
처음이 아닌 지도로 XML 데이터를 비정렬화해야 합니다. 구조체로 정렬 해제한 다음 구조체를 맵으로 변환하는 데 시간이 너무 많이 걸립니다. 대규모 데이터 세트.
1 2 3 4 | <classAccesses>
<apexClass>AccountRelationUtility</apexClass>
<enabled>true</enabled>
</classAccesses>
|
로그인 후 복사
원하는 맵:
1 2 3 | map[string]string{
"ApexClass" : "enabled"
}
|
로그인 후 복사
해결책:
xml.Unmarshaller 인터페이스 구현 원하는 지도를 나타내는 사용자 정의 유형의 경우 구조:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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) {
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.Unmarshal 함수를 사용하여 XML 데이터를 사용자 정의 유형으로 직접 구문 분석합니다.
1 2 3 4 5 6 | var classAccesses classAccessesMap
if err := xml.Unmarshal(data, &classAccesses); err != nil {
}
fmt.Println(classAccesses.m)
|
로그인 후 복사
위 내용은 XML을 Go 맵으로 직접 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!