📅  最后修改于: 2023-12-03 15:31:01.041000             🧑  作者: Mango
Go 编程语言提供了标准库 encoding/xml
来解析 XML 文件。在本文中,我们将深入了解如何使用 encoding/xml
解析 XML,同时还会讨论如何处理 XML 数据并将其转换为 Go 对象。 让我们开始!
我们可以使用 encoding/xml
的 Unmarshal
函数解析 XML。例如,假设我们有以下 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>Go 编程语言</title>
<author>Alan Donovan</author>
<author>Brian Kernighan</author>
<publisher>电子工业出版社</publisher>
<price>79.00</price>
</book>
我们可以将其解析为以下 Go 结构体:
type Book struct {
Title string `xml:"title"`
Authors []string `xml:"author"`
Publisher string `xml:"publisher"`
Price float64 `xml:"price"`
}
使用以下代码段将 XML 文件解析为 Go 结构体:
func main() {
xmlFile, err := os.Open("book.xml")
if err != nil {
panic(err)
}
defer xmlFile.Close()
var book Book
if err := xml.NewDecoder(xmlFile).Decode(&book); err != nil {
panic(err)
}
fmt.Printf("%+v", book)
}
输出:
{Title:Go 编程语言 Authors:[Alan Donovan Brian Kernighan] Publisher:电子工业出版社 Price:79}
此处使用 os.Open
函数打开 XML 文件,然后使用 xml.NewDecoder
函数创建一个新的 XML 解析器。最后使用 Decode
函数将 XML 文件解析为指定的 Go 结构体。请注意 xml
标记是否与结构体的字段标记一致。
使用 encoding/xml
库的 Marshal
方法,我们可以将结构体转换为 XML 字节切片。我们可以使用以下代码创建 XML:
book := Book{
Title: "Go 编程语言",
Authors: []string{"Alan Donovan", "Brian Kernighan"},
Publisher: "电子工业出版社",
Price: 79.0,
}
xmlData, err := xml.MarshalIndent(book, "", " ")
if err != nil {
panic(err)
}
xmlData = []byte(xml.Header + string(xmlData))
fmt.Println(string(xmlData))
输出:
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>Go 编程语言</title>
<author>Alan Donovan</author>
<author>Brian Kernighan</author>
<publisher>电子工业出版社</publisher>
<price>79</price>
</book>
此处使用 MarshalIndent
函数将 Go 结构体转换为 XML 字节切片。 xml.Header
常量可用于在生成 XML 字节切片时包含 XML 头。