我正在尝试解析具有此标记结构的RSS源中的信息:
<dc:subject>foo bar</dc:subject>
Run Code Online (Sandbox Code Playgroud)
使用内置的Ruby RSS库.显然,做的item.dc:subject是抛出错误,但我无法找出任何方法来提取这些信息.有没有办法让这个工作?或者是否可以使用不同的RSS库?
带有':'的标签实际上是带有命名空间的XML标签.我从来没有使用RSS模块取得好成绩,因为Feed格式通常不符合规格,导致模块放弃.我强烈建议使用Nokogiri来解析feed,无论是RDF,RSS还是ATOM.
Nokogiri能够使用XPath访问器或CSS访问器,并且都支持名称空间.最后两行是等价的:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::XML(open('http://somehost.com/rss_feed'))
doc.at('//dc:subject').text
doc.at('dc|subject').text
Run Code Online (Sandbox Code Playgroud)
处理命名空间时,您需要将声明添加到XPath访问器:
doc.at('//dc:subject', 'dc' => 'link to dc declaration')
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅"命名空间"部分.
没有URL或更好的示例我不能做更多,但这应该让你指向更好的方向.
几年后,我使用处理RDF,RSS和ATOM的Nokogiri为我的工作写了一个大的RSS聚合器.Ruby的RSS库不能完成任务,但Nokogiri很棒.
如果您不想自己动手,Paul Dix的Feedzirra是处理饲料的好宝石.