ノコギリを使って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>
それを行うための適切な方法は何ですか?
使用する 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>
----------------------------------------
あなたは付け加えられます 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
これがお役に立てば幸いです。
正しい方法は.children
。選択した要素内のすべてのhtmlを返します。
したがって、このコードを持っている:
<tr class="container">
<td>value</td>
</tr>
そして、このプロセスを使用して:
data = Nokogiri::HTML(html)
data.css("tr.container").children
このhtmlを返します:
<td>value</td>
私の答えは遅すぎると思いますが、それはあなたが必要とする正確なコードです。