Go 编码/xml句柄未映射的元素

Go 编码/xml句柄未映射的元素,go,Go,从 如果XML元素包含未匹配上述任何规则的子元素,并且结构具有带标记“any”的字段, 解组将子元素映射到该结构字段 我很难将XML信封的其余部分放入我的结构(以表明我有一个不完整的映射) 我知道您可以在mgo包的bson.M中使用这个方法,使用内联-但是看起来map[string]interface{}不是这里的答案 编辑: 在一些额外的游戏之后,我发现了我认为是一些额外的意外行为 切换到[]字符串作为类型开始接受输入,但没有键/值对: 我还计划采用encode/xml来解析html。我

  • 如果XML元素包含未匹配上述任何规则的子元素,并且结构具有带标记“any”的字段, 解组将子元素映射到该结构字段
我很难将XML信封的其余部分放入我的结构(以表明我有一个不完整的映射)

我知道您可以在mgo包的bson.M中使用这个方法,使用内联-但是看起来map[string]interface{}不是这里的答案

编辑: 在一些额外的游戏之后,我发现了我认为是一些额外的意外行为

切换到[]字符串作为类型开始接受输入,但没有键/值对:

我还计划采用encode/xml来解析html。我在文档中没有看到,如果一个元素存在不止一次,它将保存它的最后一个实例,而不是出错:

此处:

因为
c
是具体的东西,所以它不应该使用
”,任何“
,因此它应该有一个结构定义
C本身包含一个任意标记的列表,因此它应该包含一个
[]标记xml:'”,任意“
。。。现在要捕获
标记本身,需要xml.Name来获取标记名和带有“innerxml”的内容

最后的结果是:

const xmlString = `<foo><a>1</a><b>2</b><c><c1>3</c1><c2>4</c2></c></foo>`
type Foo struct {
    A int   `xml:"a"`
    B int   `xml:"b"`
    C Extra `xml:"c"`
}

type Extra struct {
    Items []Tag `xml:",any"`
}

type Tag struct {
    XMLName xml.Name
    Content string `xml:",innerxml"`
}
对于HTML,有两种方法。对html使用xml解析器会很复杂

type Foo struct {
    A int   `xml:"a"`
    B int   `xml:"b"`
    C struct {
        Items []struct {
            XMLName xml.Name
            Content string `xml:",innerxml"`
        } `xml:",any"`
    } `xml:"c"`
}