如何在Go中解组具有多个项目的简单xml? [英] How to Unmarshal simple xml with multiple items in Go?

查看:87
本文介绍了如何在Go中解组具有多个项目的简单xml?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从下面的xml中得到一小部分人([] People):

I would like to get a slice of people ([]People) from the following xml:

<file>
    <person>
        <name>John Doe</name>
        <age>18</age>
    </person>
    <person>
        <name>Jane Doe</name>
        <age>20</age>
    </person>
</file>

(所有其他类似的问题都过于具体和冗长)

(All other similar questions were too specific and verbose)

推荐答案

您需要创建两个结构:

  • 一个代表<file> </file>
  • 一个用于重复记录的<person> </person>
  • one to represent the <file> </file>
  • one for the repeating record <person> </person>

请查看代码中的注释:

package main

import (
    "encoding/xml"
    "fmt"
)

var sourceXML = []byte(`<file>
    <person>
        <name>John Doe</name>
        <age>18</age>
    </person>
    <person>
        <name>Jane Doe</name>
        <age>20</age>
    </person>
</file>`)

// Define a structure for each record
type Person struct {
    Name string `xml:"name"`
    Age  int    `xml:"age"`
}

// There needs to be a single struct to unmarshal into
// File acts like that one root struct
type File struct {
    People []Person `xml:"person"`
}

func main() {
    // Initialize an empty struct
    var file File

    err := xml.Unmarshal(sourceXML, &file)
    if err != nil {
        fmt.Println(err)
    }
    // file.People returns only the []Person rather than the root
    // file struct with it's contents
    fmt.Printf("%+v", file.People)
}
// output:
// [{Name:John Doe Age:18} {Name:Jane Doe Age:20}]

编辑. Kaedys说,File和Person结构也可以嵌套(使用匿名结构),如下所示:

Edit. Kaedys said the File and Person structures can also be nested (using anonymous structs) as follows:

type File struct {
    People []struct {
        Name string `xml:"name"`
        Age  int    `xml:"age"`
    } `xml:"person"`
}

这篇关于如何在Go中解组具有多个项目的简单xml?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆