解组包含数据和子节点的xml节点

解组包含数据和子节点的xml节点,xml,go,Xml,Go,我不确定这是否是有效的xml,不幸的是,这正是我要处理的——寻找如何实现的建议 我的xml如下所示: <report> <sort> <field>type<order>ascending</order></field> </sort> </report> 不幸的是,这会引发错误: 解组错误:v7。排序字段“field”与标记“field”冲突 带字段“订单”和标签“

我不确定这是否是有效的xml,不幸的是,这正是我要处理的——寻找如何实现的建议

我的xml如下所示:

<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>