Go - Unmarshal XML,属性问题

时间:2016-03-08 17:58:26

标签: go xml-parsing

也许有人可以在这里提供一些见解......我似乎正在使用编码/ 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

任何帮助将不胜感激, 谢谢。

1 个答案:

答案 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>

游乐场:http://play.golang.org/p/79bhk70yFj