当前位置:网站首页>Getting started with the go language is simple: go handles XML files
Getting started with the go language is simple: go handles XML files
2022-06-30 12:15:00 【InfoQ】
Read XML file
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>RecordTelphonetype 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}]}analysis XML
NewParser()io.Reader()Parsertest.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>Unmarshal()func Unmarshal(data []byte, v interface{}) errortype Recurlyservers 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"`
}package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type Recurlyservers 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 main() {
file, err := os.Open("test.xml") // For read access.
if err != nil {
fmt.Printf("error: %v", err)
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Printf("error: %v", err)
return
}
v := Recurlyservers{}
err = xml.Unmarshal(data, &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
}
xml.Unmarshal{{ servers} 1 [{{ server} Shanghai_VPN 127.0.0.1} {{ server} Beijing_VPN 127.0.0.2}]
<server>
<serverName>Shanghai_VPN</serverName>
<serverIP>127.0.0.1</serverIP>
</server>
<server>
<serverName>Beijing_VPN</serverName>
<serverIP>127.0.0.2</serverIP>
</server>
}xml.Unmarshalxml:"serverName"func Unmarshal(data []byte, v interface{}) error- Structure struct
- section slice
- character string string
Unmarshal- If struct The second parameter of is
stringperhaps[]bytetype , And its tag contain",innerxml",UnmarshalAll embedded primitives in the element corresponding to this position will be xml Add up to this position , As in the example above Description Definition . The final output is :
<server>
<serverName>Shanghai_VPN</serverName>
<serverIP>127.0.0.1</serverIP>
</server>
<server>
<serverName>Beijing_VPN</serverName>
<serverIP>127.0.0.2</serverIP>
</server>summary
encoding/ XMLNewDecoder()Unmarshal()边栏推荐
- Four Misunderstandings of Internet Marketing
- Multiparty Cardinality Testing for Threshold Private Set-2021:解读
- Yolov5 export the pit encountered by onnx
- R language ggplot2 visualization: use ggplot2 to visualize the scatter diagram and use scale_ x_ The log10 function configures the value range of the X axis to be logarithmic coordinates
- List collection
- Shutter 007 input field from zero
- When building the second website with pagoda, the website always reports an error: no input file specified
- go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
- 90.(cesium篇)cesium高度监听事件
- HMS core audio editing service 3D audio technology helps create an immersive auditory feast
猜你喜欢

A new journey of the smart court, paperless office, escorting the green trial of the smart court

聊聊怎么做硬件兼容性检测,快速迁移到openEuler?

Map集合

The sci-fi ideas in these movies have been realized by AI

会议预告 | 华为 2012 实验室全球软件技术峰会-欧洲分会场

A review of quantum neural networks 2022 for generating learning tasks

实现多方数据安全共享,解决普惠金融信息不对称难题

AutoCAD - len command

Set集合

Redis6学习笔记-第二章-Redis6的基本操作
随机推荐
A high precision positioning approach for category support components with multiscale difference reading notes
21、wpf之绑定使用小记
List集合
R language ggplot2 visualization: use ggplot2 visualization scatter diagram and the color parameter in AES function to specify that data points in different groups are displayed in different colors
The website with id 0 that was requested wasn‘t found. Verify the website and try again
R language ggplot2 visualization: use ggplot2 to visualize the scatter diagram, and_ Set the alpha parameter in the point parameter to specify the transparency level of data points (points transparent
Flutter 从零开始 005 图片及Icon
Paper interpretation (AGC) attributed graph clustering via adaptive graph revolution
Biological network analysis using deep learning
【云原生 | Kubernetes篇】深入了解Deployment(八)
Map集合
Beego development blog system learning (II)
对象映射 - Mapping.Mapster
MySQL索引和优化的理解学习
VScode选中多个单词
R语言ggplot2可视化:使用ggplot2可视化散点图、在geom_point参数中设置show_legend参数为FALSE配置不显示图例信息
Go 语言入门很简单:Go 处理 XML 文件
Serial communication interface 8250
使用Power Designer工具构建数据库模型
R语言ggplot2可视化:使用ggplot2可视化散点图、使用scale_x_log10函数配置X轴的数值范围为对数坐标