0
点赞
收藏
分享

微信扫一扫

go基础之XML

XML可以以结构化的形式表示数据,是一种流行的标记语言,在早期数据传输使用XML是比较常见的,例如原来的RSS,SOAP都是使用XML进行传输,学习如何使用GO与XML进行交互也是非常有用的。我们使用encoding/xml包进行操作。

1、创建XML

<root>
<Person>
<Name>张三</Name>
<Phone>11111111</Phone>
<Email dz="c1">
<Addr>xxxx@163.com</Addr>
</Email>
<Email dz="c2">
<Addr>xxxx@126.com</Addr>
</Email>
<City>China</City>
</Person>
</root>


package main

import (
"encoding/xml"
"fmt"
)

type Email struct {
Dz string `xml:"dz,attr"`
Addr string
}

type Result struct {
Name string
Phone string
Email []Email
City string
}

type Root struct {
XMLName xml.Name `xml:"root"`
Res Result `xml:"Person"`
}

func main() {
r := Root{
Res: Result{
Name: "张三",
Phone: "11111111",
Email: []Email{Email{Dz: "c1", Addr: "xxxx@163.com"}, Email{Dz: "c2", Addr: "xxxx@126.com"}},
City: "China",
},
}

vbyte, err := xml.Marshal(r)
if err != nil {
fmt.Println("marshal err", err)
}
fmt.Printf("%v\n", string(vbyte))
}

最外层的root是通过XMLName xml.Name `xml:"root"`进行标识,Res就是Person,`xml:"dz,attr"`代表的是属性名字是dz,通过xml.Marshal(r)进行转换xml。

2、解析xml

v := Root{}
data := `
<root>
<Person>
<Name>张三</Name>
<Phone>11111111</Phone>
<Email dz="c1">
<Addr>xxxx@163.com</Addr>
</Email>
<Email dz="c2">
<Addr>xxxx@126.com</Addr>
</Email>
<City>China</City>
</Person>
</root>
`
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)

通过xml.Unmarshal([]byte(data), &v),把data解析到v中。

举报

相关推荐

0 条评论