我試圖解析從具有這種標籤結構的RSS提要的信息:用Ruby解析標籤中冒號的RSS項目?
<dc:subject>foo bar</dc:subject>
使用內置的Ruby RSS庫。很明顯,做item.dc:subject
是拋出錯誤,但我不知道任何方式來拉出該信息。有什麼辦法讓這個工作?或者是否有可能使用不同的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