2011-06-06 65 views
1

我有一個這樣的HTML:紅寶石 - 穿越的引入nokogiri元素

... 
<table> 
<tbody> 
    ... 
    <tr> 
    <th> head </th> 
    <td> td1 text<td> 
    <td> td2 text<td> 
    ... 
    </tr> 
</tbody> 
<tfoot> 
</tfoot> 
</table> 

... 

我使用的引入nokogiri紅寶石。我想遍歷每一行,並將th和相應的td的文本變成一個散列。

回答

3
require "nokogiri" 

#Parses your HTML input 
html_data = "...stripped HTML markup code..." 
html_doc = Nokogiri::HTML html_data 

#Iterates over each row in your table 
#Note that you may need to clarify the CSS selector below 
result = html_doc.css("table tr").inject({}) do |all, row| 

    #Modify if you need to collect only the first td, for example 
    all[row.css("th").text] = row.css("td").text 

end 
1

我沒有運行此代碼,所以我沒有絕對的把握,但總體思路應該是正確的:

html_doc = Nokogiri::HTML("<html> ... </html>") 
result = [] 
html_doc.xpath("//tr").each do |tr| 
    hash = {} 
    tr.children.each do |node| 
    hash[node.node_name] = node.content 
    end 
    result << hash 
end 
puts result.inspect 

查看文檔的更多信息:http://nokogiri.org/Nokogiri/XML/Node.html

+0

我m作爲孩子得到一些空的節點。我如何跳過這些? – Sayuj 2011-06-06 08:51:22

+0

tr.css(「th」)和tr.css(「td」)將執行此操作。 謝謝Evgeny。 – Sayuj 2011-06-06 08:54:14