【发布时间】:2014-12-14 21:19:28
【问题描述】:
我正在使用github.com/moovweb/gokogiri 来解析 XML 文档。以下在解析 var b 时有效,但是当我在 var a (具有命名空间)上尝试相同时,我没有得到任何输出。如何使用 gokogiri 解析具有命名空间的 XML?
package main
import (
"github.com/moovweb/gokogiri"
"github.com/moovweb/gokogiri/xpath"
"log"
)
func main() {
log.SetFlags(log.Lshortfile)
doc, _ := gokogiri.ParseXml([]byte(a))
defer doc.Free()
doc.SetNamespace("", "http://example.com/this")
x := xpath.Compile(".//NodeA/NodeB")
groups, err := doc.Search(x)
if err != nil {
log.Println(err)
}
for i, group := range groups {
log.Println(i, group)
}
}
var a = `<?xml version="1.0" ?><NodeA xmlns="http://example.com/this"><NodeB>thisthat</NodeB></NodeA>`
var b = `<?xml version="1.0" ?><NodeA><NodeB>thisthat</NodeB></NodeA>`
编辑#1:
我也试过doc.RegisterNamespace 但得到了
doc.RegisterNamespace undefined (type *xml.XmlDocument has no field or method RegisterNamespace)"
和x.RegisterNamespace得到
x.RegisterNamespace undefined (type *xpath.Expression has no field or method RegisterNamespace)"
【问题讨论】:
-
看看 func (xpath *XPath) RegisterNamespace(prefix, href string),可能在您查询 RegisterNamespace("NodeA", "example.com/this") 之前,奇迹发生了?
-
@user918176: 似乎无法弄清楚...doc.RegisterNamespace 和 x.RegisterNamespace 都返回错误
-
@user918176:我也尝试过 SetNameSpace("NodeA","example.com/this") 但这也不起作用...空切片...(例如... NodeA 不是前缀)