0

对给定视频的 Youtube gdata API 进行正常查询,如下所示:

http://gdata.youtube.com/feeds/api/videos?q=H-x7UumBaFs

返回如下结果:

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:yt="http://gdata.youtube.com/schemas/2007">
<!-- data -->
<entry>
<!-- data -->
<gd:rating average="3.2309198" max="5" min="1" numRaters="511" rel="http://schemas.google.com/g/2005#overall"/>
</entry>
</feed>

但是有时 gd:rating 线不存在。

如果存在,我想从该行读取数据。我试图通过以下方式检查:

if node.at_xpath(".//gd:rating/@numRaters")

但这不起作用,给出错误“未定义的命名空间前缀:.//gd:rating/@numRaters”

你知道我如何在读取之前检查 gd:rating 命名空间的存在吗?

4

1 回答 1

0

感谢这个问题Nokogiri 文档,这是对我有用的解决方案:

gd_namespace = {"xmlns:gd" => "http://schemas.google.com/g/2005"}

...

s.num_raters = node.at_xpath('.//gd:rating/@numRaters', gd_namespace).try(:text)
于 2012-09-26T19:12:54.160 回答