我正在使用我自己的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'标签名称?
答案 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)
}
}