Go 将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

将属性从当前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="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}