读取 XML 文件
先来看一看如何读取本地 XML 文件,同 JSON 数据类似,Go 同样需要一个结构体来接收 XML 的数据。
我们定义一个 test.xml 文件,存取的是员工信息:
<?xml version="1.0" encoding="UTF-8"?> <Record> <Name>Yuzhou</Name> <SurName>1su</SurName> <Tel> <Mobile>true</Mobile> <Number>12345678</Number> </Tel> <Tel> <Mobile>true</Mobile> <Number>0755-12345</Number> </Tel> </Record>
然后我们看到该 XML 有一条记录,所以我们需要两个结构体:Record 和 Telphone :
type Record struct { Name string Surname string Tel []Telephone } type Telephone struct { Mobile bool Number string }
然后定义一个 readFromXML() 函数,先读取文件,然后解析该文件:
func readFromXMl(filename string, key interface{}) error { in, err := os.Open(filename) if err != nil { return err } decodeXML := xml.NewDecoder(in) err = decodeXML.Decode(key) if err != nil { return err } in.Close() return nil }
最后我们代码的完整部分如下:
package main import ( "encoding/xml" "fmt" "os" ) type Record struct { Name string Surname string Tel []Telephone } type Telephone struct { Mobile bool Number string } func readFromXMl(filename string, key interface{}) error { in, err := os.Open(filename) if err != nil { return err } decodeXML := xml.NewDecoder(in) err = decodeXML.Decode(key) if err != nil { return err } in.Close() return nil } func main() { arguments := os.Args if len(arguments) == 1 { fmt.Println("Please provide a filename!") return } filename := arguments[1] var myRecord Record err := readFromXMl(filename, &myRecord) if err == nil { fmt.Println("XML:", myRecord) } else { fmt.Println(err) } }
在终端执行该代码,得到如下结果:
$ go run main.go test.xml XML: {Yuzhou [{true 12345678} {true 0755-12345}]}