Golang XML编码两个相同的属性
我不得不使用一些糟糕的设计XML,我试图将这个XML读入Go结构。下面是一些样本数据:Golang XML编码两个相同的属性
<?xml version="1.0" encoding="UTF-8"?> <dictionary>
<direction from="lojban" to="English">
<valsi word="cipni" type="gismo">
<rafsi>cpi</rafsi>
<definition>x1 is a bird of species x2</definition>
<notes></notes>
</valsi>
...
</direction>
<direction from="English" to="lojban">
<nlword word="eagle" valsi="atkuila" />
<nlword word="hawk" sense="bird" valsi="aksiptrina" />
...
</direction>
</dictionary>
我的问题是,我可以在节点或者是因为它们都包含属性“词”读:
main.NLWord field "Word" with tag "word,attr" conflicts with field "Valsi" with tag "word,attr"
我开始想解组可能是错误的因为我理想地以不同的方式构造数据。我应该使用其他方法读取XML并手动构建数据结构?
type Valsi struct { Word string `xml:"word,attr"`
Type string `xml:"type,attr"`
Def string `xml:"definition"`
Notes string `xml:"notes"`
Class string `xml:"selmaho"`
Rafsi []string `xml:"rafsi"`
}
//Whoever made this XML structure needs to be painfully taught a lesson...
type Collection struct {
From string `xml:"from"`
To string `xml:"to"`
Valsi []Valsi `xml:"valsi"`
}
type Vlaste struct {
Direction []Collection `xml:"direction"`
}
var httpc = &http.Client{}
func parseXML(data []byte) Vlaste {
vlaste := Vlaste{}
err := xml.Unmarshal(data, &vlaste)
if err != nil {
fmt.Println("Problem Decoding!")
log.Fatal(err)
}
return vlaste
}
回答:
我可能没有抓住你的问题是什么,但以下结构工作正常,我 (your modified example on play):
type Valsi struct { Word string `xml:"word,attr"`
Type string `xml:"type,attr"`
Def string `xml:"definition"`
Notes string `xml:"notes"`
Class string `xml:"selmaho"`
Rafsi []string `xml:"rafsi"`
}
type NLWord struct {
Word string `xml:"word,attr"`
Sense string `xml:"sense,attr"`
Valsi string `xml:"valsi,attr"`
}
type Collection struct {
From string `xml:"from,attr"`
To string `xml:"to,attr"`
Valsi []Valsi `xml:"valsi"`
NLWord []NLWord `xml:"nlword"`
}
type Vlaste struct {
Direction []Collection `xml:"direction"`
}
在这种结构中,Collection
可以有Valsi
值以及NLWord
值。 然后,您可以根据From
/To
或Valsi
或NLWord
的长度来决定如何处理数据。
以上是 Golang XML编码两个相同的属性 的全部内容, 来源链接: utcz.com/qa/263784.html