如何在Go中解组具有多个项目的简单xml? [英] How to Unmarshal simple xml with multiple items in Go?
本文介绍了如何在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屋!
查看全文