go 生成XML文件

先上简单可以直接运行的例子: 

package main

import (
	"encoding/xml"

	"fmt"
)

type Servers struct {
	XMLName xml.Name `xml:"servers,omitempty"`
	Version string   `xml:"version,attr"`
	Svs     *server `xml:"server,omitempty"`
}

type server struct {
	ServerName string `xml:"serverName,omitempty"`
	
	//指针类型,可以使 当其属性含有标签,cdata、,chardata,且其标签没有值的时候,不显示空标签
	ServerIP   *ServerIP `xml:"serverIP,omitempty"`  
}

type ServerIP struct {
	Id string `xml:"id,attr,omitempty"`
	Value string `xml:",cdata"'`
}

func main() {
	var v Servers
	//var server server
	v.Svs.ServerIP = &ServerIP{"Shanghai_VPN","sdalkg"}

	//v.Svs = append(v.Svs, server{ServerName:"Shanghai_VPN"})
	//v.Svs = append(v.Svs, server{ServerName:"Beijing_VPN", ServerIP:&ServerIP{Id:"12",Value:"127.0.0.2"}})


	output, err := xml.MarshalIndent(v, "", "	")
	if err != nil {
		fmt.Printf("error: %v\n", err)
	}
	myString := []byte(xml.Header + string(output))
	//将字节流转换成string输出
	fmt.Println(string(myString))

}

运行结果:

<?xml version="1.0" encoding="UTF-8"?>
<servers version="1">
	<server>
		<serverName>Shanghai_VPN</serverName>
	</server>
	<server>
		<serverName>Beijing_VPN</serverName>
		<serverIP id="12"><![CDATA[127.0.0.2]]></serverIP>
	</server>
</servers>

标签使用介绍: 

tag中含有"-"的字段不会输出
tag中含有"name,attr",会以name作为属性名,字段值作为值输出为这个XML元素的属性,如上version字段所描述
tag中含有",attr",会以这个struct的字段名作为属性名输出为XML元素的属性,类似上一条,只是这个name默认是字段名了。
tag中含有",chardata",输出为xml的 character data而非element。
tag中含有",innerxml",将会被原样输出,而不会进行常规的编码过程
tag中含有",comment",将被当作xml注释来输出,而不会进行常规的编码过程,字段值中不能含有"--"字符串
tag中含有"omitempty",如果该字段的值为空值那么该字段就不会被输出到XML,空值包括:false、0、nil指针或nil接口,任何长度为0的array, slice, map或者string

猜你喜欢

转载自blog.csdn.net/zuoyinlong5434/article/details/81490327