使用Ruby解析标记中包含冒号的RSS项目?

Gor*_*not 9 ruby rss parsing

我正在尝试解析具有此标记结构的RSS源中的信息:

<dc:subject>foo bar</dc:subject>
Run Code Online (Sandbox Code Playgroud)

使用内置的Ruby RSS库.显然,做的item.dc:subject是抛出错误,但我无法找出任何方法来提取这些信息.有没有办法让这个工作?或者是否可以使用不同的RSS库?

the*_*Man 6

带有':'的标签实际上是带有命名空间的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是处理饲料的好宝石.