2013-04-25 47 views
0

如何使用Nokogiri解析此HTML?在此基础上HTML

<li><strong><a href="http://www.ukasta.org.uk/">United Kingdom Agricultural Supply Trade Association</a> (UKASTA)</strong></li> 

我想要得到的United Kingdom Agricultural Supply TradeAssociation(UKASTA)字符串。

使用引入nokogiri,我写道:

linklist=link.parent.parent.css('li strong a') 
linklist.each do |f| 
    puts f.text 
end 

f.text是 “英国农业供应TradeAssociation”, 但我如何获得 “(UKASTA)”?

回答

3

你潜水太深。我会用:

require 'nokogiri' 

html = '<li><strong><a href="http://www.ukasta.org.uk/">United Kingdom Agricultural Supply Trade Association</a> (UKASTA)</strong></li>' 
doc = Nokogiri::HTML(html) 
doc.at('strong').text 

将返回:

"United Kingdom Agricultural Supply Trade Association (UKASTA)" 

如果你必须要找到<a>节点,您可以访问 “(UKASTA)” 使用:

a_node = doc.at('a') 
a_node.text 
=> "United Kingdom Agricultural Supply Trade Association" 
a_node.next_sibling.text 
=> " (UKASTA)" 
2

你可以使用children方法,然后通过位置识别数据:

require 'nokogiri' 

html_doc = Nokogiri::HTML("<html><li><strong><a href="">United Kingdom Agricultural Supply Trade Association</a>(UKASTA)</strong></li></html>") 

html_doc.css('li strong').children[0].text 
=> United Kingdom Agricultural Supply Trade Association 
html_doc.css('li strong').children[1] 
=> (UKASTA) 
+0

注意,如果你想把它合并为一个单一的字符串,你也可以用'html_doc.css('li strong')。text'来获得'英国农业供给贸易协会(UKASTA)' – 2013-04-25 18:52:17

+0

'.css('li strong')。儿童[0]'是一种尴尬的方式去你想要的节点。 'css'返回一个NodeSet,类似于一个Array。然后你说'孩子',这将是另一个数组,然后'[0]'获得第一个元素。相反,使用'at'而不是'css'。它将第一次出现的访问器作为Node返回,所以它很好地短路了'.css('li strong')。children [0]'。 – 2013-04-26 00:56:18

+0

Thx,Tin Man。总是善于学习更清洁/更短的方式... – orde 2013-04-26 16:15:17