我正在尝试在 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
标签(即没有命名空间的标签)?
我不认为 xml 解码器可以指定元素不应该具有带有结构标记的命名空间。但我确实知道它可以为您检索有关命名空间的信息,然后您可以对数据进行后处理以获得相同的结果:
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 http://play.golang.org/p/aDEFPmHPc0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)