Go 语言入门很简单:Go 处理 XML 文件(上)

简介: 先来看一看如何读取本地 XML 文件,同 JSON 数据类似,Go 同样需要一个结构体来接收 XML 的数据。

读取 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 有一条记录,所以我们需要两个结构体:RecordTelphone

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}]}


相关文章
|
23天前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
61 2
|
2月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
1月前
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟蒋星熠Jaxonic,Go语言探索者。深耕云计算、微服务与并发编程,以代码为笔,在二进制星河中书写极客诗篇。分享Go核心原理、性能优化与实战架构,助力开发者掌握云原生时代利器。#Go语言 #并发编程 #性能优化
328 43
Go语言深度解析:从入门到精通的完整指南
|
1月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
103 1
|
2月前
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟 蒋星熠Jaxonic,执着的星际旅人,用Go语言编写代码诗篇。🚀 Go语言以简洁、高效、并发为核心,助力云计算与微服务革新。📚 本文详解Go语法、并发模型、性能优化与实战案例,助你掌握现代编程精髓。🌌 从goroutine到channel,从内存优化到高并发架构,全面解析Go的强大力量。🔧 实战构建高性能Web服务,展现Go在云原生时代的无限可能。✨ 附技术对比、最佳实践与生态全景,带你踏上Go语言的星辰征途。#Go语言 #并发编程 #云原生 #性能优化
|
3月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
272 1
|
3月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
336 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
219 0
|
3月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
192 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
282 0

热门文章

最新文章