我尝试使用Nokogiri gem从rails应用程序中的xml中提取数据,
xml :
<item>
<description>
<![CDATA[<img src="something" title="anothething">
<p>text, bla bla...</p>]]>
</description>
</item>
实际上,我这样做是为了从xml中提取数据:
def test_content
@return = Array.new
site = 'http://www.les-encens.com/modules/feeder/rss.php?id_category=0'
@doc = Nokogiri::XML(open(site, "UserAgent" => "Ruby-OpenURI"))
@doc.xpath("//item").each do |n|
@return << [
n.xpath('description')
]
end
end
你能告诉我如何从 img 标签中提取 src 属性吗?
修改: 我用正确的替换xml。
答案 0 :(得分:6)
在Nokogiri进行的xpath调用的结果将是NodeSet,这只是Nokigiri的列表Nodes
考虑到这一点,我们可以从Nokogiri文档中提取示例并进行调整。
要回答你的问题,“你能告诉我如何从img标签中提取src属性吗?”,这是一种这样的方法。
#the 'open' method here is part of the open-uri library
xml = Nokogiri::XML(open(your_url_here))
all_images = xml.xpath("//img") #returns NodeSet (list of Nokogiri Nodes)
image_sources = []
#iterate through each node
all_images.each() do |node|
image_sources << node.get_attribute('src') #One method
#image_sources << node['src'] #Another convention we could use
end
正如Phrogz在下面所说的,从所有图像节点中拉出'src'属性的一种更加自觉的方法是直接映射'src'属性,而不是迭代并推送到数组上。
image_sources = all_images.map{ |node| node['src'] }
答案 1 :(得分:1)
我的解决方案代码,感谢@Douglas和@Phrogz
def test_content
site = 'xml-link'
# On lit le xml généré par le site
xml = Nokogiri::XML(open(site, "UserAgent" => "Ruby-OpenURI"))
# On le converti en html
xml = xml.to_html
# On le lit a nouveau
html = Nokogiri::HTML(xml)
# on extrait les images
@images = html.xpath('//img')
# on stock leurs sources dans un tableau
@images_sources = @images.map{|node| node['src']}
end