Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将嵌套的XML元素解组到数组中?_Xml_Go_Unmarshalling - Fatal编程技术网

如何将嵌套的XML元素解组到数组中?

如何将嵌套的XML元素解组到数组中?,xml,go,unmarshalling,Xml,Go,Unmarshalling,我的XML包含一个预定义元素的数组,但我无法获取该数组。以下是XML结构: var xml_data = `<Parent> <Val>Hello</Val> <Children> <Child><Val>Hello</Val></Child>

我的XML包含一个预定义元素的数组,但我无法获取该数组。以下是XML结构:

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 '>'
}