标记的内容<description>
是 HTML 编码的,因此需要将其解码回 HTML,然后重新解析:
require 'nokogiri'
doc = Nokogiri::XML::DocumentFragment.parse(<<EOT)
<description>
<img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=D' title='Perturbation Line D' alt='Perturbation Line D' />
<br/><br/>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>
<img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=2' title='Perturbation Ligne 2' alt='Perturbation Ligne 2' />
<br/><br/>18:47 - Surcharge de trafic - Retard de 8 minutes entre Marbriers et Gen&egrave;ve-Plage.
</description>
</item>
<item>
<description>
<img style='vertical-align:middle' src='http://pitre-web.tpg.ch/images?ligne=19' title='Perturbation Ligne 19' alt='Perturbation Ligne 19' />
<br/><br/>18:43 - Cimeti&egrave;re Saint-Georges - direction Vernier-Village - Incident &agrave; bord du v&eacute;hicule - Immobilisation du v&eacute;hicule
</description>
</item>
</channel>
</rss>
基于此,下面是用于提取 URL 的代码:
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"]