我启动了一个处理XML输入的项目,我遇到了unmarshal方法的问题。我试图将下面的XML解组为结构体。这是多个值'标签,这很好,但在'值内?标签可以有一个'值'带有值的标签。或者有多个'值'带有'''值'的标签里面的标签。我试图在Go结构中捕获它,但到目前为止没有运气..
<lines>
<values>
<key>Key_1</key>
<value>Value_1</value>
</values>
<values>
<key>Key_2</key>
<value>
<key>NestedKey_1</key>
<value>NestedValue_1</value>
</value>
<value>
<key>NestedKey_2</key>
<value>NestedValue_2</value>
</value>
</values>
Go struct:
type Value struct {
Key string `xml:"key"`
Value string `xml:"value"`
}
type Values struct {
Key string `xml:"key"`
Value []Value `xml:"value"`
}
type Lines struct {
Values []Values `xml:"values"`
}
当我打印unmarshal输出时,我确实看到了Key_1和Key_2以及嵌套的键值对,但我没有在输出中看到Value_1。这是显而易见的,因为它是一个字符串而不是数组,任何人都知道如何解决这个问题?
答案 0 :(得分:0)
要看两件事:
表示XML元素内容的struct
类型可能有一个特殊字段&#34; XMLName&#34;类型为xml.Name
。
这可以用于命名与XML元素不同的类型。
通过&#34; xml&#34;为struct
类型的字段指定的XML元素的名称tag可以使用>
表示法指定元素的嵌套,例如
Foo string `xml:"a>b>c"`
这可以用来跳过不需要的中间(封闭)元素,并直接提取他们感兴趣的子元素。
所有这些内容都在package's doc for the Unmarshal()
func中解释。
据说,这些功能可以让您处理问题。
如果您发现您的案件确实是病态的并且难以处理简单的解组,您可能会尝试接近它using XPath。