首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用gokogiri (libxml2)解析带有命名空间的xml?

如何使用gokogiri (libxml2)解析带有命名空间的xml?
EN

Stack Overflow用户
提问于 2014-12-14 21:19:28
回答 1查看 831关注 0票数 3

我正在使用github.com/moovweb/gokogiri解析一个XML文档。以下内容在解析var b时有效,但是当我在var a (它有一个名称空间)上尝试同样的操作时,我没有得到输出。如何使用gokogiri解析具有命名空间的XML

代码语言:javascript
复制
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未定义(类型*xml.XmlDocument没有字段或方法RegisterNamespace)“

x.RegisterNamespace得到

x.RegisterNamespace未定义(类型*xpath.Expression没有字段或方法RegisterNamespace)“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-14 23:12:11

即使没有为XML中使用的名称空间分配前缀(即默认前缀),您也需要注册一个前缀,并在xpath表达式中使用它。

这个前缀可以是任何你喜欢的,这里我用的是ns。注意,它可能与文档中使用的前缀不同(如果有的话)--需要匹配的重要部分是名称空间字符串本身。

示例:

代码语言:javascript
复制
package main

import (
    "fmt"
    "github.com/moovweb/gokogiri"
    "github.com/moovweb/gokogiri/xpath"
)

func main() {
    doc, _ := gokogiri.ParseXml([]byte(a))
    defer doc.Free()
    xp := doc.DocXPathCtx()
    xp.RegisterNamespace("ns", "http://example.com/this")
    x := xpath.Compile("/ns:NodeA/ns:NodeB")
    groups, err := doc.Search(x)
    if err != nil {
        fmt.Println(err)
    }
    for i, group := range groups {
        fmt.Println(i, group.Content())
    }
}

var a = `<?xml version="1.0" ?><NodeA xmlns="http://example.com/this"><NodeB>thisthat</NodeB></NodeA>`

输出:

代码语言:javascript
复制
0 thisthat
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27474239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档