将当前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)
}

这将按预期打印main.Element{Attrs:main.Attrs{Attr1:1, Attr2:2}}

如果为匿名struct成员指定了名称,则不会解码v.Attr1v.Attr2
type Element struct {
    AttrGroup Attrs
}

在这种情况下,在struct成员上使用的正确标记是什么?

编辑:Playground version

最佳答案

为什么不这样做呢?除了复杂性,我看不到命名结构可以为您带来什么。

(Playground)

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}

关于go - 将XML属性解码为命名的嵌套结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16059497/

10-09 15:18
查看更多