当前位置:网站首页>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()边栏推荐
- HMS core audio editing service 3D audio technology helps create an immersive auditory feast
- 90.(cesium篇)cesium高度监听事件
- R语言ggplot2可视化分面图(facet):gganimate包基于transition_time函数创建动态散点图动画(gif)、使用labs函数为动画图添加动态时间标题
- Edusoho enterprise training version intranet only deployment tutorial (to solve the problems of player, upload and background jam)
- 8253 counter introduction
- 会议预告 | 华为 2012 实验室全球软件技术峰会-欧洲分会场
- After the node is installed in the NVM, the display is not internal or external when the NPM instruction is used
- STM32 porting the fish component of RT thread Standard Edition
- nvm安装node后,在使用npm指令时候显示不是内部或外部指令
- 海思3559万能平台搭建:获取数据帧修改后编码
猜你喜欢

STM32 porting the fish component of RT thread Standard Edition

Lvgl widget styles

用于生成学习任务的量子神经网络2022最新综述

lvgl 小部件样式篇

beego开发博客系统学习(二)

21、wpf之绑定使用小记

立创 EDA #学习笔记10# | 常用连接器元器件识别 和 无源蜂鸣器驱动电路

Paper interpretation (AGC) attributed graph clustering via adaptive graph revolution

Embedded sig | multi OS hybrid deployment framework

Achieve secure data sharing among multiple parties and solve the problem of asymmetric information in Inclusive Finance
随机推荐
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
Understanding and learning of MySQL indexing and optimization
695.最大岛屿面积
光谱共焦位移传感器的原理是什么?能应用那些领域?
Redis6学习笔记-第二章-Redis6的基本操作
nvm安装node后,在使用npm指令时候显示不是内部或外部指令
并行接口8255A
A Generic Deep-Learning-Based Approach for Automated Surface Inspection-論文閱讀筆記
[leetcode] 15. Sum of three numbers
[cf] 803 div2 A. XOR Mixup
又被 Kotlin 语法糖坑惨的一天
【云原生 | Kubernetes篇】深入了解Deployment(八)
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
VScode选中多个单词
Goto statement jump uninitialized variable: c2362
A High-Precision Positioning Approach for Catenary Support Components With Multiscale Difference阅读笔记
OpenMLDB Meetup No.4 会议纪要
redis在项目中的使用
wallys/IPQ8074a/2x(4 × 4 or 8 × 8) 11AX MU-MIMO DUAL CONCURRENT EMBEDDEDBOARD
After the node is installed in the NVM, the display is not internal or external when the NPM instruction is used