대규모 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!