Go 将XML属性解组为命名的嵌套结构
将属性从当前XML元素解组到匿名结构中的工作方式如下:Go 将XML属性解组为命名的嵌套结构,go,Go,将属性从当前XML元素解组到匿名结构中的工作方式如下: package main import ( "encoding/xml" "fmt" ) type Attrs struct { Attr1 int `xml:"attr1,attr"` Attr2 int `xml:"attr2,attr"` } type Element struct { Attrs } func main() { data := `<element attr1
package main
import (
"encoding/xml"
"fmt"
)
type Attrs struct {
Attr1 int `xml:"attr1,attr"`
Attr2 int `xml:"attr2,attr"`
}
type Element struct {
Attrs
}
func main() {
data := `<element attr1="1" attr2="2"></element>`
v := Element{}
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("%#v\n", v)
}
在这种情况下,结构成员上使用的正确标记是什么
编辑:为什么不这样做?除了复杂性,我看不出命名结构给您带来了什么 ()
我相信这是正确的-属性应该是字段,如果将它们隐藏到子结构中,则不再在同一级别上,从而得到结果。问题是你为什么不像以前那样使用嵌入?是的,我就是这么做的。真正的问题是标记(我无法更改)的结构很糟糕,我认为Go的XML解组的灵活性是用于修复阻抗不匹配。命名结构使您能够将两个相关属性保持在一起。假设XML是
,但您想将其解析为两个类型点{x int;y int}
结构,例如。
type Element struct {
AttrGroup Attrs
}
package main
import (
"encoding/xml"
"fmt"
)
type Element struct {
Attr1 int `xml:"attr1,attr"`
Attr2 int `xml:"attr2,attr"`
}
func main() {
data := `<element attr1="1" attr2="2"></element>`
v := Element{}
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("%#v\n", v)
}
main.Element{Attr1:1, Attr2:2}