xml - 如何在 Go 中解组包含多个项目的简单 xml?
问题描述
我想从以下 xml 中获取一部分人([]People):
<file>
<person>
<name>John Doe</name>
<age>18</age>
</person>
<person>
<name>Jane Doe</name>
<age>20</age>
</person>
</file>
(所有其他类似的问题都过于具体和冗长)
解决方案
您需要创建两个结构:
- 一个代表
<file>
</file>
- 一个用于重复记录
<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 结构也可以嵌套(使用匿名结构),如下所示:
type File struct {
People []struct {
Name string `xml:"name"`
Age int `xml:"age"`
} `xml:"person"`
}
推荐阅读
- java - Antlr 可以将嵌入式语法路由到单独的文件进行处理吗?
- node.js - 无法在 facebook 登录中使用 localhost 中的节点加载 url 错误
- c# - 创建产品捆绑包 Dynamics 365 CRM 时未设置默认价目表
- c# - CKFinder NLog 不记录
- python - 如何销毁Tkinter中所有同类标签?
- scala - Spark 执行器中内存数据结构的预期行为是什么?
- java - 如何使用命令行运行 UnfoldingMaps 项目?
- java - 导致 ERROR 递归调用 appender。有没有办法解决它?
- node.js - 错误:(节点:13452)UnhandledPromiseRejectionWarning:TypeError:message.guild.roles.cache.find 不是函数
- java - 是否可以为 freemarker 模板应用自定义字体