Nokogiri和XPath中未定义的名称空间前缀

时间:2012-09-18 02:59:51

标签: ruby-on-rails ruby xpath nokogiri

我正在尝试解析Youtube Gdata以查看是否存在具有给定ID的视频。但是没有正常的标签但是有命名空间。在链接http://gdata.youtube.com/feeds/api/videos?q=KgfdlZuVz7I上有标记:

<openSearch:totalResults>1</openSearch:totalResults>

有命名空间openSearch:

xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'

但我不知道如何在Nokogiri和Ruby中处理它。

以下是代码的一部分:

xmlfeed = Nokogiri::HTML(open("http://gdata.youtube.com/feeds/api/videos?q=#{video_id}"))
xmlfeed.at_xpath("openSearch:totalResults")

它给出错误:

Undefined namespace prefix: openSearch:totalResults

1 个答案:

答案 0 :(得分:6)

我不知道为什么,但似乎你必须删除命名空间前缀来获取节点:

xmlfeed.at_xpath("//totalresults")

另请注意,我添加了双正斜杠,它将搜索范围限定在整个文档上(没有它就无法工作)。

<强>更新

基于这个答案:How do I get Nokogiri to understand my namespaces?我猜测命名空间(openSearch:totalResults)没有被正确地声明为文档根节点上的属性,因此Nokogiri只是忽略它,这就是上面的选择器工作但命名空间的选择器不起作用的原因。