22

Nokogiri を使用して HTML を分析していますが、ノード内の生の 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 セレクターを使用すると、次のようになります。

doc = Nokogiri::HTML(html)

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

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

node.textとの結果は次のnode.contentとおりです。

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>

それを行う適切な方法は何ですか?

4

3 に答える 3

23

を使用するnode.to_sか、単にnode:

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

追加の健全性チェック HTML (あなたのもの、2 倍、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>
----------------------------------------
于 2012-06-22T23:48:39.430 に答える
7

を追加でき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
于 2016-11-08T04:13:09.773 に答える
2

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

したがって、このコードを持つ:

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

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

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

このhtmlを返します:

<td>value</td>

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

于 2014-06-27T16:28:35.893 に答える