如何为同时具有属性和内容的元素指定XML结构标记?
我必须在Go程序中解析如下内容:如何为同时具有属性和内容的元素指定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 正确的方法是什么?答案是,对于属性,您不使用
<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"`
}