在golang中解码XML

时间:2014-05-08 02:05:32

标签: xml go

我正在尝试解码以下xml。由于某些原因,我无法解码Id

package main

import (
    "encoding/xml"
    "fmt"
)

var data = `
<g xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ad="http://www.myschema.com/schema/ad/v1">
    <a xlink:href="http://example.com" data-bind="121">lala</a>
    <ad:ad id="1060469006">
</g>
`

type Anchor struct {
    DataBind  int    `xml:"data-bind,attr"`  
    XlinkHref string `xml:"http://www.w3.org/1999/xlink href,attr"`
    Id int  `xml:"http://www.myschema.com/schema/ad/v1 id,attr"` 
}

type Group struct {
    A Anchor `xml:"a"`
}

func main() {
    group := Group{}
    _ = xml.Unmarshal([]byte(data), &group)

    fmt.Printf("%#v\n", group.A)
}

Play

1 个答案:

答案 0 :(得分:4)

您正在解码的结构正在查找XML中ad:id元素的<a>属性。这有两个原因:

  1. id属性位于不同的元素上。
  2. id属性不在http://www.myschema.com/schema/ad/v1命名空间中。没有名称空间前缀的属性不会继承其元素的名称空间:相反,它们是空白名称空间的一部分。
  3. 因此,要解决此问题,首先您需要Group中标记为xml:"http://www.myschema.com/schema/ad/v1 ad"的其他字段,并且该字段的结构定义需要带有标记xml:"id,attr"的字段。