我正在尝试分析Go中的XML:
package main import ( "encoding/xml" "fmt" ) type XML struct { Foo string `xml:"foo"` } func main() { rawXML := []byte(` <xml> <foo>A</foo> <ns:foo>B</ns:foo> </xml>`) x := new(XML) xml.Unmarshal(rawXML, x) fmt.Printf("foo: %s\n", x.Foo) }
输出:
foo: B
虽然我期望它会产生:
foo: A
如何获得第一个foo标签的内容(即没有名称空间的标签)?
foo
我不认为xml解码器可以指定一个元素不应该带有struct标签的名称空间。但是我确实知道它可以为您检索有关名称空间的信息,然后可以对数据进行后期处理以得到相同的结果:
package main import ( "encoding/xml" "fmt" ) type Foo struct { XMLName xml.Name Data string `xml:",chardata"` } type XML struct { Foo []Foo `xml:"foo"` } func main() { rawXML := []byte(` <xml> <foo>A</foo> <ns:foo>B</ns:foo> </xml>`) x := new(XML) xml.Unmarshal(rawXML, x) //fmt.Printf("foo: %#v\n", x) for _, el := range x.Foo { if el.XMLName.Space == "" { fmt.Printf("non namespaced foo %q", el.Data) } } }
http://play.golang.org/p/aDEFPmHPc0