如何将嵌套的XML元素解组为字符串数组?
问题描述:
My XML contains an array of predefined elements, but I can't pick up the array. Here is the XML structure:
<?xml version='1.0' encoding='UTF-8'?>
<results preview='0'>
<meta>
<fieldOrder>
<field>values(metric_name)</field>
</fieldOrder>
</meta>
<result offset='0'>
<field k='values(metric_name)'>
<value><text>process.cpu.avg</text></value>
<value><text>process.cpu.last</text></value>
<value><text>process.cpu.max</text></value>
<value><text>process.cpu.min</text></value>
<value><text>process.disk.avg</text></value>
<value><text>process.disk.last</text></value>
<value><text>process.disk.max</text></value>
<value><text>process.disk.min</text></value>
<value><text>process.ram.avg</text></value>
<value><text>process.ram.last</text></value>
<value><text>process.ram.max</text></value>
<value><text>process.ram.min</text></value>
</field>
</result>
</results>
I tried to make a struct that looks like:
type Metrics struct {
Value []string `xml:">text"`
}
But it gives me empty array at output.
答
You can use the following struct schema to parse the given XML.
type Results struct {
Meta Meta `xml:"meta"`
Result Result `xml:"result"`
}
type Meta struct {
FieldOrder FieldOrder `xml:"fieldOrder"`
}
type FieldOrder struct {
Fields []string `xml:"field"`
}
type Result struct {
Fields []Field `xml:"field"`
}
type Field struct {
K string `xml:"k,attr"`
Values []string `xml:"value>text"`
}
Working example: https://play.golang.org/p/H6EHl_1dPLg