将XML属性解组为命名的嵌套结构

时间:2013-04-17 12:03:58

标签: 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="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}}

如果为匿名结构成员指定了名称,则v.Attr1v.Attr2不会被解组。

type Element struct {
    AttrGroup Attrs
}

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

修改:Playground version

1 个答案:

答案 0 :(得分:1)

为什么不这样做呢?除了复杂性之外,我没有看到命名结构购买的东西。

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}