对于给定视频的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")
但这不起作用,给出错误“Undefined namespace prefix:.// gd:rating / @ numRaters”
你知道如何在读取之前检查gd:rating命名空间是否存在吗?
答案 0 :(得分:0)
感谢this question和Nokogiri docs,这是对我有用的解决方案:
gd_namespace = {"xmlns:gd" => "http://schemas.google.com/g/2005"}
...
s.num_raters = node.at_xpath('.//gd:rating/@numRaters', gd_namespace).try(:text)