go语言解析xml文件
1、下面例子将xml文件反序列化到结构体中,如下:
package main
import (
"encoding/xml"
"fmt"
"log"
)
//定义常量s,值为xml格式的内容,用反引号后可以实现换行
const s = `<?xml version="1.0" encoding="UTF-8"?><html>
<head>
<title>标题</title>
</head>
<body>
<div>
<p>测试</p>
<p>测试1</p>
<p>测试2</p>
<other>
<res>hello,world</res>
</other>
</div>
</body>
</html>`
//定义多个结构体,可将结构体放在type()中
type (
html struct {
Body body `xml:"body"`
}
body struct {
Div div `xml:"div"`
}
div struct {
P []string `xml:"p"`
Other other `xml:"other"`
}
other struct {
Res string `xml:"res"`
}
)
func main() {
var html html
b := []byte(s)
err := xml.Unmarshal(b, &html)
if err != nil {
log.Fatal(err)
}
fmt.Println("p标签内容为:", html.Body.Div.P)
fmt.Println("res标签内容为:", html.Body.Div.Other.Res)
}
- 通过const定义常量,值为xml格式内容
- 通过type定义多个结构体,html结构体的元素实则为第二个结构体,以此类推,有多个标签嵌套就可定义多个结构体嵌套,注意每个字段后面需要添加结构体标签,以xml开头,因为div下的p标签有多个,因此在结构体字段类型位置要写[]string(字符串类型切片),后面的res只有一个标签,因此类型就伪string
- 通过[]byte()将字符串转换为字节切片,然后通过xml.Unmarshal反序列化到结构体html中
程序运行结果如下:



