为了账号安全,请及时绑定邮箱和手机立即绑定

Go - 解组 XML,属性问题

Go - 解组 XML,属性问题

Go
慕斯王 2021-12-20 15:53:00
也许有人可以在这里提供一些见解......我似乎遇到了编码/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任何帮助将不胜感激,谢谢。
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

不幸的是,默认的 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">

  <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。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信