为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕勒3428872 2021-12-07 15:03:06
我的 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,但不会获取 Parent.Children。package mainimport (    "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}编辑:我在这里稍微简化了这个问题。基本上我不能解组任何数组,而不仅仅是预定义的结构。以下是更新后的工作代码。在该示例中,只有一项最终出现在容器界面中。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}
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

type Parent struct {

    Val string

    Children []Child  `xml:"Children>Child"`  //Just use the '>'

}


查看完整回答
反对 回复 2021-12-07
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

对于这种嵌套,您还需要一个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 Children

}


type Children struct {

    Child []Child

}


type Child struct {

    Val string

}

也贴在这里:去游乐场


请注意,您的代码可以使用这种 XML 结构(在将变量名从 更改Children为 之后Child):


<Parent>

    <Val>Hello</Val>

    <Child><Val>Hello</Val></Child>

    <Child><Val>Hello</Val></Child>

    <Child><Val>Hello</Val></Child>

</Parent>


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信