我正在尝试分析Go中的XML:package mainimport ( "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标签的内容(即没有名称空间的标签)?
3 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
我不认为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
- 3 回答
- 0 关注
- 298 浏览
添加回答
举报
0/150
提交
取消