读取类型的属性XMLName属性值

时间:2016-04-14 09:33:41

标签: xml go marshalling

我正在使用我自己的MarshalXML函数来获取输入对象所需的输出格式,但似乎无法找到一种为标记指定正确名称的正确方法。

我想说:

type RootElement struct{
XMLName xml.Name `xml:"hello"`
world ChildElement `xml:"world"`
}

还有一个子元素:

type ChildElement struct{
Value string
}

然后MarshalXML中针对RootElement的Encode方法会给我:

<RootElement>
<ChildElement>
...
</ChildElement>
</RootElement>

而不是那个id必须创建我自己的EncodeToken方法的调用集,以便放置正确的标签名称,但即使在这里我必须将xml.Name指定为常量字符串值,即使我已经在模型中定义了它结构

有没有办法在XMLMarshal中获取'hello'和'world'标签名称?

1 个答案:

答案 0 :(得分:0)

我不确定为什么RootElement名称不起作用,但对于ChildElement,您必须放置标记xml:",chardata",因此将值检测为ChildElement&#39; s值而非节点。

http://play.golang.org/p/pg2vhD8wMf

package main

import (
    "encoding/xml"
    "fmt"
)

type RootElement struct{
    XMLName xml.Name `xml:"hello"`
    World ChildElement `xml:"world",`
}

type ChildElement struct{
    Value string `xml:",chardata"`
}

func main() {
    r := RootElement{World: ChildElement{Value: "child value"}}
    m, err := xml.MarshalIndent(r, "", "  ")
    if err == nil {
        fmt.Printf("%s\n", m)
    }
}