ruby-on-rails - Nokogiri 和 XPath 中未定义的命名空间前缀

标签 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

最佳答案

我不确定为什么,但似乎您必须删除命名空间前缀才能获取节点:

xmlfeed.at_xpath("//totalresults")

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

更新:

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

关于ruby-on-rails - Nokogiri 和 XPath 中未定义的命名空间前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469815/

相关文章:

java - 如何将nodelist中的xml解析为java

css - 无法在 CasperJS 中使用 CSS 选择器找到元素

ruby-on-rails - Rails 3.1 Formtastic 输入自定义 id 或类

ruby-on-rails - 如何使用 ActionCable 作为 API

ruby-on-rails - 在 Heroku 控制台上运行循环或多行代码

Ruby 线程不会进行上下文切换

javascript - rails 4 : disable Turbolinks in a specific page

arrays - 将抓取的链接存储在数组中,然后调用一个函数来抓取这些内容

ruby-on-rails - 从 Rails 中确定 ruby​​ 版本

java - 如何使用 Java 在 Selenium RC 中使用 xpath