解组包含数据和子节点的xml节点
我不确定这是否是有效的xml,不幸的是,这正是我要处理的——寻找如何实现的建议 我的xml如下所示:解组包含数据和子节点的xml节点,xml,go,Xml,Go,我不确定这是否是有效的xml,不幸的是,这正是我要处理的——寻找如何实现的建议 我的xml如下所示: <report> <sort> <field>type<order>ascending</order></field> </sort> </report> 不幸的是,这会引发错误: 解组错误:v7。排序字段“field”与标记“field”冲突 带字段“订单”和标签“
<report>
<sort>
<field>type<order>ascending</order></field>
</sort>
</report>
不幸的是,这会引发错误:
解组错误:v7。排序字段“field”与标记“field”冲突
带字段“订单”和标签“字段>订单”
是否有一种内在的方式来实现这一点,或者我正在寻找一些自定义的解组
更新:
至少根据这个答案,如果xml有点难看,这应该是有效的:单个xml元素只能映射到单个结构字段,并且您的模型尝试将
映射到两个结构字段,因此这是不允许的
的字符数据和子元素
处于同一“级别”,它们是同级,因此必须位于同一结构中。但它们是不同类型的节点:要获取字符数据,请使用xml:,chardata“
struct标记;要获取
子元素的值,请使用xml:“order”
struct标记
因此,请使用以下Go模型:
type Field struct {
Value string `xml:",chardata"`
Order string `xml:"order"`
}
type Sort struct {
Field Field `xml:"field"`
}
type Report struct {
Sort Sort `xml:"sort"`
}
将输入XML解析到此模型中:
func main() {
var r Report
err := xml.Unmarshal([]byte(src), &r)
fmt.Printf("%+v %v", r, err)
}
const src = `<report>
<sort>
<field>type<order>ascending</order></field>
</sort>
</report>`
它以同样的方式工作,给出了类似的输出(在上尝试此项):
{SortField:{Value:类型顺序:升序}
它绝对不是有效的XML,
没有终止,只是完全无效。不要试图将其解析为xml。抱歉,更正了xml示例,字段字段被终止(打字错误)-但我认为仍然无效,因为nodeLooks中的数据和节点是有效的,只是顺序不是字段的直接同级,而是文本节点。我只是随便看看chardata-Yep这很有效-感谢您的全面回答
func main() {
var r Report
err := xml.Unmarshal([]byte(src), &r)
fmt.Printf("%+v %v", r, err)
}
const src = `<report>
<sort>
<field>type<order>ascending</order></field>
</sort>
</report>`
{Sort:{Field:{Value:type Order:ascending}}} <nil>
type Field struct {
Value string `xml:",chardata"`
Order string `xml:"order"`
}
type Report struct {
SortField Field `xml:"sort>field"`
}
{SortField:{Value:type Order:ascending}} <nil>