这是XML结构:
<root xmlns:test="http://test.com/testns">
<test:sub>
<title>this is title</title>
</test:sub>
</root>
Run Code Online (Sandbox Code Playgroud)
它将使用下面定义的结构进行解组:
type Root struct {
XMLName xml.Name `xml:"root"`
Sub *Sub
}
type Sub struct {
XMLName xml.Name `xml:"http://test.com/testns sub"`
Title string `xml:"title"`
}
Run Code Online (Sandbox Code Playgroud)
这就是编组回来的东西:
<root>
<sub xmlns="http://test.com/testns">
<title>this is title</title>
</sub>
</root>
Run Code Online (Sandbox Code Playgroud)
在marshal和sub元素使用url名称空间而不是前缀之后,将删除根名称空间前缀定义.这是代码
有没有什么方法可以使marshal/unmarshal不改变xml结构?谢谢!
看起来它并没有改变逻辑结构。在原始输入中,元素声明了命名空间的root前缀,但它实际上并未声明自己位于该命名空间中。testhttp://test.com/testns
这是一个替代版本,可以实现您想要的功能:https://play.golang.org/p/NqNyIyMB4IP
我将命名空间提升到Root结构,并将test:前缀添加到root输入中的 xml 元素。