微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Go笔记-XML

解析xml

示例xml:xml_test.xml

<?xml version="1.0" encoding="utf-8"?>
<servers version="1">
    <server>
        <serverName>Shanghai_VPN</serverName>
        <serverIP>127.0.0.1</serverIP>
    </server>
    <server>
        <serverName>Beijing_VPN</serverName>
        <serverIP>127.0.0.2</serverIP>
    </server>
</servers>
type Servers struct {
	XMLName     xml.Name `xml:"servers"`
	Version     string   `xml:"version,attr"`
	Svs         []Server `xml:"server"`
	Description string   `xml:",innerxml"`
}

type Server struct {
	XMLName    xml.Name `xml:"server"`
	ServerName string   `xml:"serverName"`
	ServerIP   string   `xml:"serverIP"`
}

func readxml() {
	f,err := os.Open("xml_test.xml")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer f.Close()

	data,err := IoUtil.ReadAll(f)
	if err != nil {
		fmt.Println(err)
		return
	}

	servers := Servers{}
	err = xml.Unmarshal(data,&servers)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Printf("%#v\n",servers)
}

输出

xml.Servers{XMLName:xml.Name{Space:"",Local:"servers"},Version:"1",Svs:[]xml.Server{xml.Server{XMLName:xml.Name{Space:"",Local:"server"},ServerName:"Shanghai_VPN",ServerIP:"127.0.0.1"},xml.Server{XMLName:xml.Name{Space:"",ServerName:"Beijing_VPN",ServerIP:"127.0.0.2"}},Description:"\r\n    <server>\r\n        <serverName>Shanghai_VPN</serverName>\r\n        <serverIP>127.0.0.1</serverIP>\r\n    </server>\r\n    <server>\r\n        <serverName>Beijing_VPN</serverName>\r\n        <serverIP>127.0.0.2</serverIP>\r\n    </server>\r\n"}

结构体中tag标签的写法参考xml.Unmarshal上的注释。

输出xml

这里省略了Servers和Server两个的声明,见上面的定义。

servers := &Servers{Version: "1"}
	servers.Svs = append(servers.Svs,Server{ServerName: "Shanghai_VPN",ServerIP: "127.0.0.1"})
	servers.Svs = append(servers.Svs,Server{ServerName: "Beijing_VPN",ServerIP: "127.0.0.2"})

	//data,err := xml.Marshal(servers)
	data,err := xml.MarshalIndent(servers,"","  ")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(xml.Header)
	fmt.Println(string(data))

原文地址:https://www.jb51.cc/xml/294388.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。