如何将嵌套的XML元素解组到数组中?
我的XML包含一个预定义元素的数组,但我无法获取该数组。以下是XML结构:如何将嵌套的XML元素解组到数组中?,xml,go,unmarshalling,Xml,Go,Unmarshalling,我的XML包含一个预定义元素的数组,但我无法获取该数组。以下是XML结构: var xml_data = `<Parent> <Val>Hello</Val> <Children> <Child><Val>Hello</Val></Child>
var xml_data = `<Parent>
<Val>Hello</Val>
<Children>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
</Children>
</Parent>`
<Parent>
<Val>Hello</Val>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
</Parent>
var xml\u数据=`
你好
你好
你好
你好
`
这是完整的代码,这是。运行此操作将获取Parent.Val,但不会获取Parent.Children
package main
import (
"fmt"
"encoding/xml"
)
func main() {
container := Parent{}
err := xml.Unmarshal([]byte(xml_data), &container)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(container)
}
}
var xml_data = `<Parent>
<Val>Hello</Val>
<Children>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
</Children>
</Parent>`
type Parent struct {
Val string
Children []Child
}
type Child struct {
Val string
}
主程序包
进口(
“fmt”
“编码/xml”
)
func main(){
容器:=父{}
错误:=xml.Unmarshal([]字节(xml_数据),&容器)
如果错误!=零{
fmt.Println(错误)
}否则{
fmt.Println(集装箱)
}
}
变量xml_数据=`
你好
你好
你好
你好
`
类型父结构{
Val字符串
孩子
}
类型子结构{
Val字符串
}
编辑:我把问题简化了一点。基本上我不能解组任何数组,不仅仅是预定义的结构。下面是更新的工作代码。在该示例中,容器接口中只有一个项目
func main() {
container := []Child{}
err := xml.Unmarshal([]byte(xml_data), &container)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(container)
}
/*
ONLY ONE CHILD ITEM GETS PICKED UP
*/
}
var xml_data = `
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
`
type Child struct {
Val string
}
func main(){
容器:=[]子{}
错误:=xml.Unmarshal([]字节(xml_数据),&容器)
如果错误!=零{
fmt.Println(错误)
}否则{
fmt.Println(集装箱)
}
/*
仅拾取一个子项
*/
}
变量xml_数据=`
你好
你好
你好
`
类型子结构{
Val字符串
}
对于这种嵌套,您还需要一个子元素的结构:
package main
import (
"fmt"
"encoding/xml"
)
func main() {
container := Parent{}
err := xml.Unmarshal([]byte(xml_data), &container)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(container)
}
}
var xml_data = `<Parent>
<Val>Hello</Val>
<Children>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
<Child><Val>Hello</Val></Child>
</Children>
</Parent>`
type Parent struct {
Val string
Children Children
}
type Children struct {
Child []Child
}
type Child struct {
Val string
}
谢谢你。你能告诉我在我编辑的简化示例中它是什么样子吗?我正在应用你的解决方案,但它不起作用。这里是操场:根据您解释的原则,第一个示例应该有效。我认为,在这种情况下,问题可能是XML必须只有一个顶级元素,即第二个示例中的XML输入无效XML@believesInSanta,可以避免为嵌套元素使用单独的结构。请慢慢来,阅读XML解组规则解释:encoding/XML
包中有一些强大的工具,如果只浏览一下Internet上的随机示例,这些工具可能并不明显;-)哦,哇,我没有意识到这些标签的全部效用。非常感谢您向我展示@kostixThis是一个更好的、不太混乱的解决方案,并确认了它的有效性:是的,这也是我所需要的。否则,对于类似的情况,接受的解决方案在xml到json的转换中给我留下了冗余的节点/结构@谢谢你!这应该被认为是一个正确的答案。
type Parent struct {
Val string
Children []Child `xml:"Children>Child"` //Just use the '>'
}