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 关注
- 154 浏览
添加回答
举报