我启动了一个处理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>
转到结构:
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"`
}
在打印解组输出时,我确实看到了Key_1和Key_2以及嵌套的键/值对,但是在输出中看不到Value_1。这是显而易见的,因为它是一个字符串而不是一个数组,有人知道如何解决此问题吗?
游乐场:http://play.golang.org/p/I4U0lhPt5U
最佳答案
要看的两件事:
struct
类型可能具有xml.Name
类型的特殊字段“XMLName”。可以使用这种类型来命名与XML元素不同的类型。
struct
类型的字段指定的XML元素的名称可能使用>
表示法指定元素的嵌套,例如Foo string `xml:"a>b>c"`
这可用于跳过不需要的中间(包围)元素,并直接提取其感兴趣的子元素。
所有这些内容在package's doc for the
Unmarshal()
func中进行了说明。据说,这些功能应该可以使您处理问题。
如果您发现自己的病例确实是病态的并且很难处理简单的拆封,则可以尝试使用using XPath进行处理。
关于xml - Go:XML解码嵌套的键/值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32528184/