2012-06-22 3 views
13

いくつかのhtmlを分析するのにNokogiriを使用しています。しかし、私はどのようにノードの生のhtmlを取得するのか分からない。例えば、与えられた:Nokogiriがノードの生のhtmlを取得する

<tr class="tableX"> 
    <td align="center"> 
    <font size="2"><a href="javascript:open('9746')">9746</a></font> 
    </td> 
    <td align="center"> 
    <font size="2">2012-06-26</font> 
    </td> 
</tr> 

を、私はこのXPathを使用する場合:node.textnode.contentから

doc = Nokogiri::HTML(html) 

nodes = doc.search("//tr[@class='tablebX']") 

nodes.each do |node| 
    node.text # or node.content 
end 

結果は以下のとおりです。

9746 
2012-06-26 

私はtr内のすべての生のHTMLを取得したいと思いブロック。この場合:

<td align="center"> 
    <font size="2"><a href="javascript:open('9746')">9746</a></font> 
</td> 
<td align="center"> 
    <font size="2">2012-06-26</font> 
</td> 

これを行うには適切な方法はありますか?

答えて

14

使用node.to_s、または単にnode:追加の健全性チェックHTMLで

nodes = doc.search("//tr[@class='tablebX']") 
nodes.each do |node| 
    puts node.to_s 
    puts '-'*40 
end 

私が手(あなたは、途中で別のクラスのtrと、倍増):

<tr class="tableX"> 
<td align="center"> 
<font size="2"><a href="javascript:open('9746')">9746</a></font> 
      </td> 
      <td align="center"><font size="2">2012-06-26</font></td> 
</tr> 
---------------------------------------- 
<tr class="tableX"> 
<td align="center"> 
<font size="2"><a href="javascript:open('9746')">9746</a></font> 
      </td> 
      <td align="center"><font size="2">2012-06-26</font></td> 
</tr> 
---------------------------------------- 
2

正しい方法は.childrenです。選択した要素内のすべてのhtmlを返します。

だから、このコードを持つ:

<tr class="container"> 
    <td>value</td> 
</tr> 

そして、このプロセスを使用した:

data = Nokogiri::HTML(html) 
data.css("tr.container").children 

は、このHTMLを返します。

<td>value</td> 

私は私の答えは遅すぎですが、だと思いますあなたが必要とする正確なコード。

3

children.to_htmlを追加できます。下記のようにしてください:

doc = Nokogiri::HTML(html) 

nodes = doc.search("//tr[@class='tablebX']") 

nodes.each do |node| 
    node.children.to_html # or node.content 
end 

私はこれがあなたに役立つことを願っています。

関連する問題