也许有人可以在这里提供一些见解......我似乎正在使用编码/ XML库打砖墙。
对于我的生活,我无法复制<的有效XML属性。 gpx> 基本上我是从GPS文件中解组XML数据,然后将其编组回另一个文件。一切都正常,除了根XML的属性标签< gpx>
我尝试了各种
func (c *gpx) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {}
输入无效的方法。
基本上我只想要root标签< GPX>正确分配所有属性。为什么你不能做属性[] xml.Attr xml:“,attr”或类似的东西超出我的范围。
良好的XML标头 - > http://pastebin.com/XjEZuBa1
我无法链接错误的XML标头,因为我是一个新成员..但XML解组/编组进程将_添加到命名空间,导致问题等等。
GO Playground链接:http://play.golang.org/p/J7wy6306Cj
任何帮助将不胜感激, 谢谢。
答案 0 :(得分:0)
不幸的是,默认的Go XML编码器不能编码像
这样的东西xmlns:foo="http://example.com/Foo-V1" foo:attr="bar"
作为the code shows,它会根据网址选择名称,而您无法自行定义名称空间。 Go编码器发出这样的代码,AFAIK基本上与上面的代码相同:
xmlns:Foo-V1="http://example.com/Foo-V1" Foo-V1:attr="bar"
这里唯一不同的是名称空间的前缀。
至于其他名称空间的前向声明,我建议只在需要它们的元素和属性上声明它们。即编码像
这样的东西<foo xmlns:bar="http://example.com/Bar-V1">
<bar:elem>Hello world</bar:elem>
</foo>
使用像这样的结构
type Foo struct {
XMLName xml.Name `xml:"foo"`
BarElem BarElem
}
type BarElem struct {
XMLName xml.Name `xml:"http://example.com/Bar-V1 elem"`
Data string `xml:",innerxml"`
}
序列化为
<foo>
<elem xmlns="http://example.com/Bar-V1">Hello world</elem>
</foo>