2 回答

TA貢獻1783條經驗 獲得超4個贊
您可以>
在標簽中使用。
如果 XML 元素包含名稱與格式為“a”或“a>b>c”的標記前綴匹配的子元素,unmarshal 將深入到 XML 結構中查找具有給定名稱的元素,并將映射該結構體字段的最里面的元素。以 ">" 開頭的標記相當于以字段名稱開頭,后跟 ">" 的標記。
如果字段使用標簽“a>b>c”,則元素 c 將嵌套在父元素 a 和 b 內。命名相同父級的彼此相鄰的字段將包含在一個 XML 元素中。
例如:
type?DataTestplan?struct?{ ????Data?[]Testplan?`json:"data"?xml:"data>element"` }

TA貢獻1886條經驗 獲得超2個贊
無需為每個標簽創建不同的結構。您可以將它們全部嵌入其中。對于 xml 解析,您缺少一些標簽。>您可以通過在 xml 標記中使用 來避免一些代碼復制。當您迭代兩個元素時,這將有效地“合并”它們。下面是一個更簡潔的實現示例:
type Root struct {
XMLName xml.Name `xml:"root"`
Data []struct {
Group string `json:"group" xml:"group"`
Name string `json:"name" xml:"name"`
Parameters []struct {
Comment string `json:"comment" xml:"comment,omitempty"`
Description string `json:"description" xml:"description,omitempty"`
} `json:"parameters" xml:"parameters>element"`
Released bool `json:"released" xml:"released"`
Teststeps []struct {
Bin int32 `json:"bin" xml:"bin"`
} `xml:"teststeps>element,omitempty"`
Version int32 `json:"version" xml:"version"`
} `json:"data" xml:"data>element"`
}
通過運行:
var dataNewTestplans DataTestplan
err := xml.NewDecoder(r.Body).Decode(&dataNewTestplans)
xmlData, _ := xml.Marshal(dataNewTestplans)
fmt.Printf(string(xmlData))
你得到:
<root><data><element><group>TEST</group><name>TEST</name><parameters><element><comment>test</comment><description>test</description></element><element><comment>test1</comment></element></parameters><released>true</released><teststeps><element><bin>32</bin></element></teststeps><version>1</version></element></data></root>
- 2 回答
- 0 關注
- 210 瀏覽
添加回答
舉報