2012-02-20 11 views
1

私はこのようなHTML文書を持っている:Nokogiriを使用してこのHTMLを解析するにはどうすればよいですか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<title>Page Title</title> 
<style type="text/css"> 
</style> 
</head> 
<body> 

<div class="section"> 
    <table> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
    </table> 
</div> 

<div class="section"> 
    <table> 
     <tr> 
      <td>test</td><td>test</td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>test</td><td>test</td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>test</td><td>test</td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>test</td><td>test</td><td>test</td><td>test</td> 
     </tr> 
    </table> 
</div> 

<div class="section"> 
    <table> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
     <tr> 
      <td>this_is_what_i_want</td><td>this_is_what_i_want</ 
td><td>test</td><td>test</td> 
     </tr> 
    </table> 
</div> 

</body> 
</html> 

私は最初のすべての行の最初の2つの要素tdと 第三table要素を取得したいです。この結果を得るには?行の2つのtd 要素が何らかの関係を持っていて、すべてのtd の要素を同じように扱うことができない

注意。たとえば、 の内容と2つのtd要素を連続して連結するにはどうすればよいですか?

答えて

2
doc.xpath('//div[position()=1 or position()=3]/table/tr').map{|tr| tr.css('td')[0..1].map(&:text).join(' ')} 
2

それは2つのXPathステートメントを使用してもを行うことができます。

doc.xpath('//div[position()=1 or position()=3]/table/tr').map {|row| row.xpath('concat(//td[1]," ",//td[2])')} 

それが単一のXPath文で行うことができない理由は、文字列のXPath関数は、最初のノード上で動作していることですノードセットのみ。ノードの選択や連結はできますが、両方を行うことはできません。

XPath 2.0ではstring-join()関数を使用できますが、NokogiriはXPath 1.0のみをサポートしています。

関連する問題