假设我有这个 XML:
<something>
<value type="item">
...
</value>
<value type="other">
...
</value>
</something>
我能否以某种方式将具有不同属性的值提取到我的结构中的不同项目,例如:
type Something struct {
Item Item `xml:"value[type=item]"` // metacode
Other Other `xml:"value[type=other]"`
}
这可能吗?我应该使用什么作为 xml: 属性?
最佳答案
我认为不可能直接将按属性值区分的项目列表映射到特定字段。您需要将其映射到一个 slice ,如以下示例(Items slice ):
package main
import (
"encoding/xml"
"fmt"
)
func main() {
type Item struct {
Type string `xml:"type,attr"`
Value string `xml:",chardata"`
}
type Something struct {
XMLName xml.Name `xml:"something"`
Name string `xml:"name"`
Items []Item `xml:"value"`
}
var v Something
data := `
<something>
<name> toto </name>
<value type="item"> my item </value>
<value type="other"> my other value </value>
</something>
`
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
}
由您在解码后处理 slice 以提取值并在需要时将它们放入特定字段。
关于xml - 具有不同属性的相同 XML 标记的不同结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311908/