一个简单的xml元素如何解组到golang结构?
假设以下xml元素具有一个属性和一个浮点值:一个简单的xml元素如何解组到golang结构?,xml,struct,go,unmarshalling,Xml,Struct,Go,Unmarshalling,假设以下xml元素具有一个属性和一个浮点值: <thing prop="1"> 1.23 </thing> <thing prop="2"> 4.56 </thing> XMLName属性的用法让我感到困惑。什么时候应该将它放在结构中,什么时候作为标记放在包装器中?下面,您可以找到用于解组给定数据的代码 在去掉空格之前,无法正确取消对浮点值的编组 可以使用“、chardata”注释引用标记的内容 您不需要在结构中指定xml.Name字段,
<thing prop="1">
1.23
</thing>
<thing prop="2">
4.56
</thing>
XMLName属性的用法让我感到困惑。什么时候应该将它放在结构中,什么时候作为标记放在包装器中?下面,您可以找到用于解组给定数据的代码
xml.Name
字段,只要不含糊应该使用哪个结构即可主程序包
进口(
“编码/xml”
“fmt”
)
类型根结构{
Things[]Thing`xml:“Thing”`
}
类型事物结构{
Prop int`xml:“Prop,attr”`
值float64`xml:,chardata“`
}
func main(){
数据:=`
1.23
4.56
`
事物:=&根{}
err:=xml.Unmarshal([]字节(数据),thing)
如果错误!=零{
fmt.Println(错误)
返回
}
fmt.Println(东西)
}
如果文档中不包含
元素,这将如何工作?@Kiril XML文件中必须有一个根元素。
type ThingElem struct {
Prop int `xml:"prop,attr"`
Value float // ???
}
type ThingWrapper struct {
T ThingElem `xml:"thing"`
}
// VS
type ThingElem struct {
XMLName xml.Name `xml:"thing"` // Do I even need this?
Prop int `xml:"prop,attr"`
Value float // ???
}
package main
import (
"encoding/xml"
"fmt"
)
type Root struct {
Things []Thing `xml:"thing"`
}
type Thing struct {
Prop int `xml:"prop,attr"`
Value float64 `xml:",chardata"`
}
func main() {
data := `
<root>
<thing prop="1">1.23</thing>
<thing prop="2">4.56</thing>
</root>
`
thing := &Root{}
err := xml.Unmarshal([]byte(data), thing)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(thing)
}