📌  相关文章
📜  golang parsing xml - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:31:01.041000             🧑  作者: Mango

Golang 解析 XML - Go 编程语言

Go 编程语言提供了标准库 encoding/xml 来解析 XML 文件。在本文中,我们将深入了解如何使用 encoding/xml 解析 XML,同时还会讨论如何处理 XML 数据并将其转换为 Go 对象。 让我们开始!

解析 XML

我们可以使用 encoding/xmlUnmarshal 函数解析 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 标记是否与结构体的字段标记一致。

序列化 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 头。