Go语言关于XML的读取与生成
来源:互联网 发布:德州仪器校园招聘知乎 编辑:程序博客网 时间:2024/06/07 04:00
要读取的XML如下:
<?xml version="1.0" encoding="UTF-8"?><resources><string name="VideoLoading">Loading video…</string><string name="ApplicationName">what</string></resources>
这种结构的XML,其末节点是属性与文本并存的(网上看到的大部分教程都是属性节点就是属性节点,文本节点就是文本节点)
根据这个XML,生成对应的struct
type StringResources struct {XMLName xml.Name `xml:"resources"`ResourceString []ResourceString `xml:"string"`}type ResourceString struct {XMLName xml.Name `xml:"string"`StringName string `xml:"name,attr"`InnerText string `xml:",innerxml"`}
(内部属性都要大写字母开头,属性节点的名称变量名固定为XMLName,内部的文本统一叫innerxml)
以下为完整读取此XML的代码
package mainimport ("encoding/xml""io/ioutil""log")type StringResources struct {XMLName xml.Name `xml:"resources"`ResourceString []ResourceString `xml:"string"`}type ResourceString struct {XMLName xml.Name `xml:"string"`StringName string `xml:"name,attr"`InnerText string `xml:",innerxml"`}func main() {content, err := ioutil.ReadFile("studygolang.xml")if err != nil {log.Fatal(err)}var result StringResourceserr = xml.Unmarshal(content, &result)if err != nil {log.Fatal(err)}log.Println(result)log.Println(result.ResourceString)for _, o := range result.ResourceString {log.Println(o.StringName + "===" + o.InnerText)}}输出结果如图:
接下来对这个XMl中的属性值为ApplicationName的文本内容进行修改,然后保存到文件里,代码如下:
package mainimport ("encoding/xml""fmt""io/ioutil""log""os""strings")type StringResources struct {XMLName xml.Name `xml:"resources"`ResourceString []ResourceString `xml:"string"`}type ResourceString struct {XMLName xml.Name `xml:"string"`StringName string `xml:"name,attr"`InnerText string `xml:",innerxml"`}func main() {content, err := ioutil.ReadFile("studygolang.xml")if err != nil {log.Fatal(err)}var result StringResourceserr = xml.Unmarshal(content, &result)if err != nil {log.Fatal(err)}log.Println(result)log.Println(result.ResourceString)for i, line := range result.ResourceString {log.Println(line.StringName + "===" + line.InnerText)//修改ApplicationName节点的内部文本innerTextif strings.EqualFold(line.StringName, "ApplicationName") {fmt.Println("change innerText")//注意修改的不是line对象,而是直接使用result中的真实对象result.ResourceString[i].InnerText = "这是新的ApplicationName"}}//保存修改后的内容xmlOutPut, outPutErr := xml.MarshalIndent(result, "", "")if outPutErr == nil {//加入XML头headerBytes := []byte(xml.Header)//拼接XML头和实际XML内容xmlOutPutData := append(headerBytes, xmlOutPut...)//写入文件ioutil.WriteFile("studygolang_test.xml", xmlOutPutData, os.ModeAppend)fmt.Println("OK~")} else {fmt.Println(outPutErr)}}
编译运行如图:
生成的XML如下:
<?xml version="1.0" encoding="UTF-8"?><resources><string name="VideoLoading">Loading video…</string><string name="ApplicationName">这是新的ApplicationName</string></resources>
更复杂的XML结构,这里就不多讲了。主要是struct的结构会复杂点。
0 0
- Go语言关于XML的读取与生成
- go语言xml文件的解析及生成代码示例
- 读取与生成XML
- 安卓中xml的读取与生成
- 关于XML的读取与写入数据
- 读取生成的xml
- C#中关于XML的读取和生成
- android中xml文件的生成与读取(Pull)
- go语言解析xml
- go语言-生成随机数
- DOM4J生成与读取XML文档
- 构造xml文件(生成与读取)
- 关于Go语言daemon启动的方法.
- go语言关于零值的定义
- 关于go语言的学习和使用
- go语言json格式解析与生成示例
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- 如何在线将ppt文件转换成pdf文件
- CentOS 7搭建万能播放器
- MongoDB 自定义函数
- [c/c++]qsort中cmp函数写法
- GDB 进行调试 使用心得
- Go语言关于XML的读取与生成
- sublime 插件安装以及快捷键
- linux下安装nodejs
- 对html的作用
- C# WinForm - WebBrowser
- Snmp学习总结(一)——Snmp的基本概念
- (1.2.1.4)双向循环链表
- 关于自定义TabHost的使用和注意事项
- html5&css3 Learning