2013-04-25 81 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