7

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

1 回答 1

6

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

xmlfeed.at_xpath("//totalresults")

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

更新

基于这个答案:如何让 Nokogiri 了解我的命名空间?我猜想命名空间 ( openSearch:totalResults) 没有正确声明为文档根节点上的属性,因此 Nokogiri 只是忽略它,这就是上面的选择器有效但命名空间的选择器无效的原因。

于 2012-09-18T04:37:29.320 回答