處理大型XML 資料集時,解組為結構體然後解組為映射的雙重轉換過程可能會變得非常耗時。本文探討了一種更有效的方法來直接將 XML 解組為映射。
問題:
目標是將以下XML 轉換為映射[string]字串,其中鍵值對是從子元素中提取的:
<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解組為map [字串]字串。這消除了中間結構轉換的需要,從而實現更有效率的解組過程。
部分解決方案和演示:
演示方法的部分解決方案可在https://play.golang.org/p/7aOQ5mcH6zQ。該解決方案包括自訂資料結構和範例 XML 以演示解組過程。
以上是如何有效地將 XML 直接解組為 Go Map[string]string?的詳細內容。更多資訊請關注PHP中文網其他相關文章!