我正在尝试解析 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/