Go语言自学系列 | golang标准库encoding/xml

Posted COCOgsta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言自学系列 | golang标准库encoding/xml相关的知识,希望对你有一定的参考价值。

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客_go语言自学


xml包实现xml解析

核心的两个函数

func Marshal(v interface) ([]byte, error)

将struct编码成xml,可以接收任意类型

func Unmarshal(data []byte, v interface) error

将xml转码成struct结构体

两个核心结构体

type Decoder struct 
    ...

从输入流读取并解析xml

type Encoder struct 
    // contains filtered or unexpected fields

写xml到输出流

package main

import (
    "encoding/xml"
    "fmt"
)

type Person struct 
    XMLName xml.Name `xml:"person"`
    Name    string   `xml:"name"`
    Age     int      `xml:"age"`
    Email   string   `xml:"email"`


func Marshal() 
    p := Person 
        Name: "tom",
        Age: 20,
        Email: "tom@gmail.com",
    
    // b, _ := xml.Marshal(p)
    // 有缩进格式
    b, _ := xml.MarshalIndent(p, " ", "  ")
    fmt.Printf("%v\\n", string(b))


func main() 
    Marshal()

运行结果

[Running] go run "/Users/guoliang/Documents/Source Code/go/test.go"
 <person>
   <name>tom</name>
   <age>20</age>
   <email>tom@gmail.com</email>
 </person>

也可以读写文件

package main

import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "os"
)

type Person struct 
    XMLName xml.Name `xml:"person"`
    Name    string   `xml:"name"`
    Age     int      `xml:"age"`
    Email   string   `xml:"email"`


func read() 
    b, _ := ioutil.ReadFile("a.xml")
    var p Person
    xml.Unmarshal(b, &p)
    fmt.Printf("p: %v\\n", p)



func write() 
    p := Person
        Name: "tom",
        Age: 20,
        Email: "tom@gmail.com",
    

    f, _ := os.OpenFile("a.xml", os.O_WRONLY, 0777)
    defer f.Close()
    e := xml.NewEncoder(f)
    e.Encode(p)



func main() 
    read()

运行结果

[Running] go run "/Users/guoliang/Documents/Source Code/go/test.go"
p:  person tom 20 tom@gmail.com
package main

import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "os"
)

type Person struct 
    XMLName xml.Name `xml:"person"`
    Name    string   `xml:"name"`
    Age     int      `xml:"age"`
    Email   string   `xml:"email"`


func read() 
    b, _ := ioutil.ReadFile("a.xml")
    var p Person
    xml.Unmarshal(b, &p)
    fmt.Printf("p: %v\\n", p)



func write() 
    p := Person
        Name: "tom",
        Age: 20,
        Email: "tom@gmail.com",
    

    f, _ := os.OpenFile("a.xml", os.O_WRONLY, 0777)
    defer f.Close()
    e := xml.NewEncoder(f)
    e.Encode(p)



func main() 
    write()

运行结果

<person><name>tom</name><age>20</age><email>tom@gmail.com</email></person>

以上是关于Go语言自学系列 | golang标准库encoding/xml的主要内容,如果未能解决你的问题,请参考以下文章

Go语言自学系列 | golang标准库builtin

Go语言自学系列 | golang标准库errors

Go语言自学系列 | golang标准库bufio

Go语言自学系列 | golang标准库io包

Go语言自学系列 | golang标准库中的sort包

Go语言自学系列 | golang标准库ioutil包