2014-11-14 45 views
0

雖然可能不清楚,但我會盡力而爲。 我目前使用dashing,儀表板設計師(基於sinatra)和RSS小部件。 的事情是,我不能每次RSS項目之前得到的小圖像:將rss feed中的web圖像集成到Ruby中

<description> 
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=D' title='Perturbation Line D' alt='Perturbation Line D' /&gt; 
&lt;br/&gt;&lt;br/&gt;21:03 - THEME - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
</description> 

我知道代碼看起來有些奇怪,但網頁上所有的東西,直至21:03被忽略。 如何將小徽標集成到頁面中或至少獲取行號(這是公交線路 - >這裏是D),以便在我的小部件中以純文本形式進行集成? 我不知道這是否有幫助,但我使用nogokiri從RSS提要中獲取XML。那麼,我可以在那裏獲取這條信息?提前:)

summary = clean_html(news_item.xpath('description').text) 

感謝

+0

你想找到''標籤,或在得到其內容? – 2014-11-14 22:15:32

回答

1

<description>標籤的內容是HTML編碼,因此它需要被解碼回HTML,然後重新解析:

require 'nokogiri' 

doc = Nokogiri::XML::DocumentFragment.parse(<<EOT) 
<description> 
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=D' title='Perturbation Line D' alt='Perturbation Line D' /&gt; 
&lt;br/&gt;&lt;br/&gt;21:03 - THEME - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
</description> 
EOT 

這是怎麼了找到該標籤:

description_text = doc.at('description') 

要訪問其內容使用:

description_text = doc.at('description').text 
# => "\n<img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=D' title='Perturbation Line D' alt='Perturbation Line D' />\n<br/><br/>21:03 - THEME - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n" 

要做點什麼的內容:

description_doc = Nokogiri::HTML::DocumentFragment.parse(description_text) 
description_doc.at('img')['src'] # => "http://pitre-web.tpg.ch/images?ligne=D" 

真正的XML不匹配是在給定的問題。這裏是展示正在遇到的一個更好的例子:在此基礎上

<?xml version='1.0' encoding='UTF-8'?> 
<rss> 
    <channel> 
    <title /> 
    <description /> 
    <item> 
     <description> 
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=2' title='Perturbation Ligne 2' alt='Perturbation Ligne 2' /&gt; 
     &lt;br/&gt;&lt;br/&gt;18:47 - Surcharge de trafic - Retard de 8 minutes entre Marbriers et Gen&amp;egrave;ve-Plage. 
     </description> 
    </item> 
    <item> 
     <description> 
&lt;img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=19' title='Perturbation Ligne 19' alt='Perturbation Ligne 19' /&gt; 
     &lt;br/&gt;&lt;br/&gt;18:43 - Cimeti&amp;egrave;re Saint-Georges - direction Vernier-Village - Incident &amp;agrave; bord du v&amp;eacute;hicule - Immobilisation du v&amp;eacute;hicule 
     </description> 
    </item> 
    </channel> 
</rss> 

,這裏的工程,以提取網址代碼:

require 'nokogiri' 
doc = Nokogiri::XML(open('xml')) 
img_srces = doc.search('item description').map{ |description| 
    desc_doc = Nokogiri::HTML(description.text) 
    desc_doc.at('img')['src'] 
} 
img_srces 
# => ["http://pitre-web.tpg.ch/images?ligne=2", 
#  "http://pitre-web.tpg.ch/images?ligne=19"] 
+0

感謝您的答案,但我的編譯器不接受['src'] ... 我想要做一個news_headlines.push({}),但只能與圖像的ALT,所以我可以在一個我的網站上的文字表單。 未定義的方法'[]'爲零:NilClass – ddgav 2014-11-15 16:08:41

+0

什麼編譯器?如果你得到一個nil,那麼你的XML示例與你工作的XML不匹配,因爲我給出的代碼示例從示例XML中的'src'參數獲取值。 – 2014-11-15 18:53:05

+0

如果你願意,你可以自己嘗試,這個feed是這樣的:http://www.tpg.ch/perturbation/xml 謝謝 – ddgav 2014-11-21 17:36:36