猿问

Go - 解组 XML,属性问题

也许有人可以在这里提供一些见解......我似乎遇到了编码/XML 库的问题。

在我的一生中,我无法从 < gpx > 复制有效的 XML 属性。基本上,我是从 GPS 文件解组 XML 数据,然后将其编组回另一个文件。一切正常,除了根 XML < gpx > 的属性标签

我尝试了各种

func (c *gpx) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {}

键入方法无济于事。

基本上我只希望根标签 < GPX > 正确分配所有属性。为什么你不能做 Attributes []xml.Attr xml:",attr" 或类似的东西是我无法理解的。

好的 XML 标头 -> http://pastebin.com/XjEZuBa1

我无法链接错误的 XML 标头,因为我是新成员……但是 XML 解组/编组过程将 _ 添加到名称空间,这会导致问题等。

GO Playground 链接:http : //play.golang.org/p/J7wy6306Cj

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


慕斯王
浏览 145回答 1
1回答

繁花不似锦

不幸的是,默认的 Go XML 编码器无法编码诸如xmlns:foo="http://example.com/Foo-V1" foo:attr="bar"如代码所示,它根据 URL 选择名称,您不能自己定义命名空间。Go 编码器发出这样的代码,AFAIK,基本上等同于上面的代码:xmlns:Foo-V1="http://example.com/Foo-V1" Foo-V1:attr="bar"这里唯一不同的是命名空间的前缀。至于其他命名空间的前向声明,我建议只在需要它们的元素和属性上声明它们。即编码类似的东西<foo xmlns:bar="http://example.com/Bar-V1">&nbsp; <bar:elem>Hello world</bar:elem></foo>使用这样的结构type Foo struct {&nbsp; &nbsp; XMLName xml.Name `xml:"foo"`&nbsp; &nbsp; BarElem BarElem}type BarElem struct {&nbsp; &nbsp; XMLName xml.Name `xml:"http://example.com/Bar-V1 elem"`&nbsp; &nbsp; Data&nbsp; &nbsp; string&nbsp; &nbsp;`xml:",innerxml"`}序列化为<foo>&nbsp; <elem xmlns="http://example.com/Bar-V1">Hello world</elem></foo>游乐场:http : //play.golang.org/p/79bhk70yFj。
随时随地看视频慕课网APP

相关分类

Go
我要回答