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 ...
随机推荐
- 字符与字符串3——char 的大小
字符变量占用内存的大小,也就是char类型声明的变量,这个变量占多少字节. 一字节 char c = 'A'; printf("%d,%d\n", sizeof(c),sizeof ...
- set循环遍历删除特定元素
使用Iterator迭代器 public class Demo { public static void main(String[] args) { Set<Object> obj = n ...
- List在遍历中删除t元素
法一:使用普通for循环遍历 注意: 1.从头开始循环,每次删除后 i 减一. 2.从尾开始循环. public class Main { public static voi ...
- DevExpress WinForms使用教程:Diagram Control
[DevExpress WinForms v18.2下载] DevExpress WinForms v18.2包含WinForms和WPF Diagram Controls的三个高要求功能:新的Dia ...
- day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
# 多态的理解:# Python 天生自带多态# 鸭子类型 list 和 tuple 就是一对鸭子类型 很像但是没有继承关系## 而其他的类型 上传参数或者打印参数的时候 必须是指定的数据类型# -- ...
- python列表(list)的使用技巧及高级操作
python列表(list)的使用技巧及高级操作置顶 2018年03月25日 13:39:41 顽劣的石头 阅读数:5478 标签: python extend bisect list enumera ...
- python day04 作业答案
1. 1) li=['alex','WuSir','ritian','barry','wenzhou'] print(len(li)) 2) li=['alex','WuSir','ritian',' ...
- 1--Jmeter4.0连接Oracle数据库
一.Jmeter要连接oracle数据库,就必须复制JDBC驱动jar包文件ojdbc5.jar或者ojdbc6.jar到Jmeter的lib目录下 路径:oracle安装目录\jdbc\lib 二. ...
- JAVA 线程Join
join方法: 当某个线程要等待另一个线程执行结束后才能继续执行时,使用join方法. public class DinnerThread { public static void main(Stri ...
- 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha's staff(几何找规律)
Problem Description "You shall not pass!"After shouted out that,the Force Staff appered in ...