加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Go笔记-XML

发布时间:2020-12-16 02:07:50 所属栏目:百科 来源:网络整理
导读:解析xml 示例xml:xml_test.xml ?xml version="1.0" encoding="utf-8"?servers version="1" server serverNameShanghai_VPN/serverName serverIP127.0.0.1/serverIP /server server serverNameBeijing_VPN/serverName serverIP127.0.0.2/serverIP /server/ser

解析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("%#vn",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:"rn    <server>rn        <serverName>Shanghai_VPN</serverName>rn        <serverIP>127.0.0.1</serverIP>rn    </server>rn    <server>rn        <serverName>Beijing_VPN</serverName>rn        <serverIP>127.0.0.2</serverIP>rn    </server>rn"}

结构体中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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读