用Ruby解析标签中冒号的RSS项目?
我试图解析从具有这种标签结构的RSS提要的信息:用Ruby解析标签中冒号的RSS项目?
<dc:subject>foo bar</dc:subject>
使用内置的Ruby RSS库。很明显,做item.dc:subject
是抛出错误,但我不知道任何方式来拉出该信息。有什么办法让这个工作?或者是否有可能使用不同的RSS库?
其中具有':'的标签实际上是具有名称空间的XML标签。我从来没有使用RSS模块获得好结果,因为提要格式通常不符合规格,导致模块放弃。我强烈建议使用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
当你需要的声明添加到XPath的访问命名空间处理:
doc.at('//dc:subject', 'dc' => 'link to dc declaration')
See the "Namespaces" section获取更多信息。
没有URL或更好的示例我不能做更多的事情,但这应该让你指出一个更好的方向。
几年来,我使用处理RDF,RSS和ATOM的Nokogiri为我的工作写了一个大的RSS聚合器。 Ruby的RSS库没有完成任务,但是Nokogiri非常棒。
如果你不想推出自己的产品,Paul Dix's Feedzirra是一个很好的加工饲料宝石。
我认为item['dc:subject']
可能工作。
如果说://libxml.rubyforge .org /) – 2011-03-24 00:14:40
是的,rss解析器完全忽略了它无法识别的那些标签,所以它们甚至不会将它放到'item'对象中。游民。我如何用'libxml'获取'
我建议看看Nokogiri而不是libxml。 Nokogiri非常强大并得到很好的支持。 – 2011-03-24 06:13:42
的RSS模块似乎有做那些XML命名空间属性的能力,即<dc:date>
这样的:不能正常工作使用[libxml的(HTTP
feed.items.each do |item| puts "Date: #{item.dc_date}" end
扩展这个想法,gem'arrogance'建立在nokogiri之上,并且可以像传入提要URL和操作返回的帖子数组一样简单地解析提要。 Rubygems:https://rubygems.org/gems/arrogance – providence 2011-08-17 17:08:16
我会在一段时间看看它。当我编写我的聚合器时,没有发现处理我遇到的各种完全混乱的聚合。 – 2011-08-18 22:56:43
Yup,Arrogance发现你的标签,无论如何设置它们为[:title] [:author] [:link] [:description]和[:date]。 – providence 2011-08-18 23:01:20