web-dev-qa-db-ja.com

ノードの生のhtmlを取得するのこぎり

ノコギリを使って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>

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

21
icn

使用する 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>
----------------------------------------
21
Dave Newton

あなたは付け加えられます 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

これがお役に立てば幸いです。

6
akbarbin

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

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

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

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

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

このhtmlを返します:

<td>value</td>

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

3
Kenneth John