XML unmarshal不尊重根元素名称空间前缀定义

Wil*_*ang 6 go xml-parsing

这是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结构?谢谢!

Jer*_*amp 1

看起来它并没有改变逻辑结构。在原始输入中,元素声明了命名空间的root前缀,但它实际上并未声明自己位于该命名空间中。testhttp://test.com/testns

这是一个替代版本,可以实现您想要的功能:https://play.golang.org/p/NqNyIyMB4IP

我将命名空间提升到Root结构,并将test:前缀添加到root输入中的 xml 元素。