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 ...
随机推荐
- 2.BIND服务基础及域主服务器配置
一.BIND 现今使用最晚广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早由伯克利大学的一名学生编写,现在最新的版本是9,由ISC(Internet ...
- RabbitMQ fanout类型的Exchange
就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的fanout类型就是指定将消息群发到与Exchange绑定的所有队列中. fanout这个 ...
- X86汇编语言实现的贪吃蛇游戏
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- vue-9-动画
transition: <div id="demo"> <button v-on:click="show = !show"> Toggl ...
- 某些material英文翻译
chrome 铬,铬合金, 镀铬 matte 无光泽的,不光滑的 Decal 陶瓷的 duo color 双色 livery (这个没找到什么吊意思,我看像是一个类似打logo的材质)
- struts2应用
1.处理表单数据 GreetingAction public class GreetingAction extends ActionSupport{ private String username; ...
- 异常 No module named 'numpy.core._multiarray_umath
No module named 'numpy.core._multiarray_umath 解决方法: 1. 可能是由于模型保存时出错,导致模型没有保存成功,此时删掉保存的模型即可 2. numpy版 ...
- string使用方法
转载自:https://blog.csdn.net/tengfei461807914/article/details/52203202 使用场合: string是C++标准库的一个重要的部分,主要用于 ...
- Final阶段第1周/共1周 Scrum立会报告+燃尽图 05
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484] 版本控制:https://git.coding.net/liuyy08 ...
- Oracle数据库三种备份方案
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用 ...