golang xml parent node add attribute without struct
question:
golang encoding/xml: foo>bar,attr - foo ignored
solution:
you can replace output result to add attr for foo
package main //warning: go version must >=1.6
import (
"bytes"
"encoding/xml"
"fmt"
//"runtime"
) type Test struct {
Play Play
//Name CdataString `xml:"Play>Name"`
Vast string `xml:"vast,attr"`
Ad string `xml:""`
} type Play struct {
//Id string `xml:"id,attr"`
Name CdataString `xml:"Name"`
}
type CdataString struct {
Value string `xml:",cdata"`
} func main() {
//fmt.Println(runtime.Version())
name := CdataString{Value: "bbbccc"}
//v := &Test{Id: "111", Play: Play{Id: "111", Name: name}}
v := &Test{Play: Play{Name: name}}
output, err := xml.MarshalIndent(v, " ", " ")
if err != nil {
fmt.Printf("error: %v\n", err)
}
//add skipoffset=”00:00:05” for Play
output = bytes.Replace(output, []byte("<Play>"), []byte(`<Play skipoffset="00:00:05">`), -)
fmt.Println(string(output))
}
other issues :
https://github.com/golang/go/issues/3688
refer doc :
https://golang.org/pkg/encoding/xml/#pkg-examples
https://play.golang.org/p/KN6MWrvFJD
// xmltest.go
package main import (
"encoding/xml"
"fmt"
"time"
) type Request struct {
XMLName xml.Name `xml:"root"`
Login string `xml:"login"`
Password string `xml:"password"`
From string `xml:"getBookings>from,attr"`
Location string `xml:"getBookings>location,attr"`
} type WorkAround struct {
XMLName xml.Name `xml:"root"`
Login string `xml:"login"`
Password string `xml:"password"`
GetBookings struct {
From time.Time `xml:"from,attr"`
Location string `xml:"location,attr"`
} `xml:"getBookings"`
} func main() {
raw := []byte(`
<root>
<login>test</login>
<password>password</password>
<getBookings from="2011-01-01T12:00:00Z" location="">
</root>`) fmt.Printf("Original Data: %s\n", string(raw))
r, w := &Request{}, &WorkAround{}
xml.Unmarshal(raw, r) // Check removed for brevity
xml.Unmarshal(raw, w) // Check removed for brevity
fmt.Printf("Unmarshalled Data: %+v\n", r)
fmt.Printf("Unmarshalled Workaround: %+v\n", w)
mr, _ := xml.MarshalIndent(r, "", "\t") // Check removed for brevity
mw, _ := xml.MarshalIndent(w, "", "\t") // Check removed for brevity
fmt.Printf("Marshalled Data: %s\n\nUsing Workaround: %s\n\n", mr, mw)
fmt.Printf("Bug fixed: %t\n", string(mr) == string(mw))
}
code2:
https://play.golang.org/p/VE74VQoJ7c
// xmltest.go
package main import (
"encoding/xml"
"fmt"
"time"
) // Original failing struct
/*
type WSRequest struct {
XMLName xml.Name `xml:"root"`
Login string `xml:"login"`
Password string `xml:"password"`
From string `xml:"getBookings>from,attr"`
Location string `xml:"getBookings>location,attr"`
}
*/ // Slightly restructured :-)
type WSRequest struct {
XMLName xml.Name `xml:"root"`
Login string `xml:"login"`
Password string `xml:"password"`
GetBookings struct {
From time.Time `xml:"from,attr"`
Location string `xml:"location,attr"`
} `xml:"getBookings"`
} func main() {
raw := []byte(`
<root>
<login>test</login>
<password>password</password>
<getBookings from="2011-01-01T12:00:00Z" location=""/>
</root>`) fmt.Printf("Original Data: %s\n", string(raw))
data := &WSRequest{}
err := xml.Unmarshal(raw, data)
if err != nil {
panic("Well unmarshalling didn't work: " + err.Error())
}
fmt.Printf("Unmarshalled Data: %+v\n", data)
m, err2 := xml.MarshalIndent(data, "", "\t")
if err2 != nil {
panic("Well marshalling didn't work: " + err2.Error())
}
fmt.Printf("Marshalled Data: %s\n", m)
// This still fails for obvious reasons.
fmt.Printf("Bug fixed: %t\n", string(m) == string(raw))
fmt.Println("Buf fixed is false, for obvious reasons!")
}
golang xml parent node add attribute without struct的更多相关文章
- golang xml解析
第二章里还提到了xml的解析部分.之前有想整理下encoding包下常用的几个文件格式的处理.这次刚好整理下xml的部分.先上例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...
- 使用POI解析Excel时,出现org.xml.sax.SAXParseException: duplicate attribute 'o:relid'的解决办法
1.使用org.apache.poi解析excle,.xlsx类型文件InputStream is = new FileInputStream(strFileName);XSSFWorkbook wb ...
- golang xml和json的解析与生成
golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main; import ( "encoding/xml" " ...
- xml中Node和Element的区别
本文转载自:http://blog.csdn.net/wcydiyi/article/details/4432636点击打开链接 1.元素(Element)和结点(Node)的区别: ...
- 循环对XML文档添加Attribute以及移除Element 【转】
如下面的图片要求,需要把左边的xml文改为右边的文档. 需要添加Attribute,移除Element,但是所添加的Attribute值已经跟被移除的Element值不相同.实现方法可以参考<对 ...
- golang . xml output with cdata
out put with cdata package main //warning: go version must >=1.6 import ( "encoding/xml" ...
- 【RF库XML测试】Add Element
Name:Add ElementSource:XML <test library>Arguments:[ source | element | index=None | xpath=. ] ...
- 【RF库XML测试】Element Attribute Should Be
Name:Element Attribute Should BeSource:XML <test library>Arguments:[ source | name | expected ...
- Golang之方法(自定义类型,struct)
方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...
随机推荐
- nginx;keepalived配置出现主主的解决方法(脑裂问题)
1.查看日志 tail -f /var/log/messages 发现master和backup机都是mastaer模式启动的 通过查看别人的经历,发现VRRP基于报文实现的.master设置一定时间 ...
- VSTO:使用C#开发Excel、Word【3】
<Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...
- springmvc添加定时任务
springmvc.xml文件中添加如下配置 <bean id="ClearTempRoomLogTask" class="com.test.listener.St ...
- SQL-34 对于表actor批量插入如下数据
题目描述 对于表actor批量插入如下数据CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,fir ...
- python笔记2-变量
变量 存东西所用 #定义变量 name='feifei'#定义变量,字符串 age=18.9#整型或者小数定义变量不需要加引号 print(name) print(age) name2="w ...
- go语言基础学习
go基础学习,面向对象-方法在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法 使用= 和:=的区别: // = 使用必须使用先var声明例如: var a a=100 ...
- Oracle中把一张表查询结果插入到另一张表中
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...
- synchronized(六)
package com.bjsxt.base.sync006;/** * 锁对象的改变问题 * @author alienware * */public class ChangeLock { priv ...
- FCC JS基础算法题(8):Slasher Flick(截断数组)
题目描述: 返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始. 这个题目有两个方法,都比较简单,用slice方法: function slasher(arr, howMany) { // 请 ...
- python中的pandas的两种基本使用
python中的pandas的两种基本使用2018年05月19日 16:03:36 木子柒努力成长 阅读数:480 一.pandas简介 pandas:panel data analysis(面板数据 ...