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中

程序运行结果如下:

标签