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

时间:2015-09-21 22:32:54

标签: go xml-parsing

这是XML结构:

<root xmlns:test="http://test.com/testns">
            <test:sub>
                <title>this is title</title>
            </test:sub>
</root>

使用以下定义的结构进行解组:

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"` 
}

这就是被编组的东西:

<root>
    <sub xmlns="http://test.com/testns">
        <title>this is title</title>
    </sub>
</root>

在marshal和sub元素使用url名称空间而不是前缀之后,将删除根名称空间前缀定义。这是code

maullhal / unmarshal有没有办法改变xml结构?谢谢!

1 个答案:

答案 0 :(得分:0)

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

这是一个替代版本,可以执行您想要的内容:https://play.golang.org/p/NqNyIyMB4IP

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