我不确定这是有效的xml,不幸的是它是我必须处理的 - 寻找有关如何完成的建议。
我的xml看起来像这样:
npm init
我试图解构以下结构:
<report>
<sort>
<field>type<order>ascending</order></field>
</sort>
</report>
不幸的是,这引发了错误:
解组错误:v7.Sort字段&#34;字段&#34;标签&#34;字段&#34;冲突 with field&#34; Order&#34;标签&#34;字段&gt;订单&#34;
是否有内置的方法来实现这一点,或者我正在寻找一些自定义的解组
更新: 至少根据这个答案,如果稍微丑陋的xml:Can a XML element contain text and child elements at the same time?
,它应该是有效的答案 0 :(得分:1)
单个XML元素只能映射到单个struct字段,并且您的模型会尝试将<field>
映射到2个struct字段,因此不允许这样做。
<order>
和子元素xml:",chardata"
的字符数据处于相同的“级别”,它们是兄弟姐妹,因此它们必须位于相同的结构中。但它们是不同类型的节点:要获取字符数据,使用<order>
struct标记,并获取xml:"order"
子元素的值,请使用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"`
}
struct标记。< / p>
所以使用以下Go模型:
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>`
将输入XML解析为此模型:
{Sort:{Field:{Value:type Order:ascending}}} <nil>
输出是(在Go Playground上尝试):
Sort
由于Field
只包含一个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>
它以相同的方式工作,给出类似的输出(在Go Playground上试试这个):
query{
users{
id
}
}