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的更多相关文章

  1. golang xml解析

    第二章里还提到了xml的解析部分.之前有想整理下encoding包下常用的几个文件格式的处理.这次刚好整理下xml的部分.先上例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...

  2. 使用POI解析Excel时,出现org.xml.sax.SAXParseException: duplicate attribute 'o:relid'的解决办法

    1.使用org.apache.poi解析excle,.xlsx类型文件InputStream is = new FileInputStream(strFileName);XSSFWorkbook wb ...

  3. golang xml和json的解析与生成

    golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main; import ( "encoding/xml" " ...

  4. xml中Node和Element的区别

    本文转载自:http://blog.csdn.net/wcydiyi/article/details/4432636点击打开链接 1.元素(Element)和结点(Node)的区别:         ...

  5. 循环对XML文档添加Attribute以及移除Element 【转】

    如下面的图片要求,需要把左边的xml文改为右边的文档. 需要添加Attribute,移除Element,但是所添加的Attribute值已经跟被移除的Element值不相同.实现方法可以参考<对 ...

  6. golang . xml output with cdata

    out put with cdata package main //warning: go version must >=1.6 import ( "encoding/xml" ...

  7. 【RF库XML测试】Add Element

    Name:Add ElementSource:XML <test library>Arguments:[ source | element | index=None | xpath=. ] ...

  8. 【RF库XML测试】Element Attribute Should Be

    Name:Element Attribute Should BeSource:XML <test library>Arguments:[ source | name | expected ...

  9. Golang之方法(自定义类型,struct)

    方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...

随机推荐

  1. 枚举类返回Map键值对,绑定到下拉框

    有时候,页面的下拉框要显示键值对,但是不想从数据库取,此时我们可以写一个枚举类, Java后台代码 1.枚举类 import java.util.HashMap; import java.util.M ...

  2. vue-11-自定义指令

    用于对纯 DOM 元素进行底层操作. // 注册一个全局自定义指令 v-focus Vue.directive('focus', { // 当绑定元素插入到 DOM 中. inserted: func ...

  3. js如何生成一个对象,并转化为json字符串

    js如何生成一个对象,并转化为json字符串,很多人都会误写为: var ary = []; var obj = {}; for (var i = 0; i < 3; i++) { obj.na ...

  4. 关于Java的接口

    其实刚开始听到接口的时候不解其意,为什么要有接口这个东西,加之老师上课我可能没仔细听(或者时间长了忘了?),这次看到了“用接口设计并实现圆,三角形,矩形的面积与周长计算”这个题目的代码,它将接口定义在 ...

  5. JavaWeb基础-Session和Cookie

    JSP状态管理 http的无状态性,服务器不会记得发送请求的浏览器是哪一个 保存用户状态的两大机制:session和cookie Cookie:是web服务器保存在客户端的一系列文本信息 作用:对特定 ...

  6. spoon 更新数据

    一个小需求,被要求使用spoon 来同步数据 主要流程为: 1.查询A库未同步数据 id 2.根据步骤1查到的id,作为条件更新B库数据 3.更新B库数据成功则更改库A中的数据状态为已同步. 4.添加 ...

  7. MVC扩展之HtmlHelper辅助方法

    1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...

  8. L290 英语中级班-3月上

    1元音饱满度 a [ei] name gamee [i:] he she mei [ai] fine likeo [ou] go homeu [ u:] use blue 2口音适应 刚开始说时,慢点 ...

  9. 大数据-06-Spark之读写Hive数据

    简介 Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据.Hive本身不存储数据,它完全依赖HDFS和MapReduce.这样就可以将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询 ...

  10. 读懂TCP状态转移

    读懂TCP状态转移过程,对理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各状态(总共11个)含义不在本文介绍的范围,请参考文末的书目列表. TCP状态转换图(state transiti ...