golang解析xml
解析xml标签或者html标签,都是xml文档格式。要是返回的html标签,可以用第三方依赖库goquery来解析。下面说下,解析xml标签的格式。直接上代码,代码如下:
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type SConfig struct {
// 指定最外层的标签为config
XMLName xml.Name `xml:"config"`
// 读取smtpServer配置项,并将结果保存到SmtpServer变量中
SmtpServer string `xml:"smtpServer"`
SmtpPort int `xml:"smtpPort"`
Sender string `xml:"sender"`
SenderPasswd string `xml:"senderPasswd"`
// 读取receivers标签下的内容,以结构方式获取
Receivers SReceivers `xml:"receivers"`
}
type SReceivers struct {
// 读取flag属性
Flag string `xml:"flag,attr"`
// 读取user数组
User []string `xml:"user"`
}
func main() {
// For read access.
file, err := os.Open("servers.xml")
if err != nil {
fmt.Printf("error: %v", err)
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Printf("error: %v", err)
return
}
v := SConfig{}
err = xml.Unmarshal(data, &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
fmt.Println("SmtpServer : ",v.SmtpServer)
fmt.Println("SmtpPort : ",v.SmtpPort)
fmt.Println("Sender : ",v.Sender)
fmt.Println("SenderPasswd : ",v.SenderPasswd)
fmt.Println("Receivers.Flag : ",v.Receivers.Flag)
for i,element := range v.Receivers.User {
fmt.Println(i,element)
}
}
举例:xml 格式如下:文件名,servers.xml
<config>
<smtpServer>smtp.163.com</smtpServer>
<smtpPort>25</smtpPort>
<sender>user@163.com</sender>
<senderPasswd>123456</senderPasswd>
<receivers flag="true">
<age>16</age>
<user>Mike_Zhang@live.com</user>
<user>test1@qq.com</user>
</receivers>
</config>
在代码里,先针对xml的格式,创建对应的struct结构体
type SConfig struct{
...
}
然后,读取xml文件,读取data,再解析对应的标签。
执行结果如下:
C:\go\src\first>go run xml.go
{{ config} smtp.163.com 25 user@163.com 123456 {true [Mike_Zhang@live.com test1@qq.com]}}
SmtpServer : smtp.163.com
SmtpPort : 25
Sender : user@163.com
SenderPasswd : 123456
Receivers.Flag : true
0 Mike_Zhang@live.com
1 test1@qq.com
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2020/06/21 12:34