如何为同时具有属性和内容的元素指定XML结构标记?

如何为同时具有属性和内容的元素指定XML结构标记?,xml,go,Xml,Go,我必须在Go程序中解析如下内容: <PARENT> <FIRST KEY="something">Value</FIRST> <SECOND KEY="something">Value</SECOND> </PARENT> 但我得到了这个错误: xml: FIRST>KEY chain not valid with attr flag 正确的方法是什么?答案是,对于属性,您不使用

我必须在Go程序中解析如下内容:

<PARENT>
    <FIRST KEY="something">Value</FIRST>
    <SECOND KEY="something">Value</SECOND>
</PARENT>          
但我得到了这个错误:

xml: FIRST>KEY chain not valid with attr flag

正确的方法是什么?

答案是,对于属性,您不使用ID链。而是在逗号分隔的列表中使用ID,如下所示:

type SomeType struct {
    XMLName     xml.Name `xml:"PARENT"`
    FirstValue  string   `xml:"FIRST"`
    FirstKey    string   `xml:"FIRST,KEY,attr"`
    SecondValue string   `xml:"SECOND"`
    SecondKey   string   `xml:"SECOND,KEY,attr"`
}
我的直觉是,逗号分隔列表中的所有内容都是像attr或ommitempty这样的关键字,所以我不希望在这里表达像ID这样的键,但我的直觉是错误的。关于这个问题的更多讨论正在进行中


编辑:我说得太快了。上面没有提到FirstKey或SecondKey的值。

答案是,对于属性,您不使用ID链。而是在逗号分隔的列表中使用ID,如下所示:

type SomeType struct {
    XMLName     xml.Name `xml:"PARENT"`
    FirstValue  string   `xml:"FIRST"`
    FirstKey    string   `xml:"FIRST,KEY,attr"`
    SecondValue string   `xml:"SECOND"`
    SecondKey   string   `xml:"SECOND,KEY,attr"`
}
我的直觉是,逗号分隔列表中的所有内容都是像attr或ommitempty这样的关键字,所以我不希望在这里表达像ID这样的键,但我的直觉是错误的。关于这个问题的更多讨论正在进行中


编辑:我说得太快了。上面的内容没有选择FirstKey或SecondKey的值。

您可以声明一个与结构中的xml匹配的类型:

type T struct {
    XMLName xml.Name `xml:"PARENT"`
    First   Value    `xml:"FIRST"`
    Second  Value    `xml:"SECOND"`
}

type Value struct {
    Key   string `xml:"KEY,attr"`
    Value string `xml:",chardata"`
}

您可以声明与结构中的xml匹配的类型:

type T struct {
    XMLName xml.Name `xml:"PARENT"`
    First   Value    `xml:"FIRST"`
    Second  Value    `xml:"SECOND"`
}

type Value struct {
    Key   string `xml:"KEY,attr"`
    Value string `xml:",chardata"`
}