我正在使用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>
执行此操作的正确方法是什么?
使用node.to_s
,或仅使用node
:
nodes = doc.search("//tr[@class='tablebX']")
nodes.each do |node|
puts node.to_s
puts '-'*40
end
通过附加的健全性检查HTML(您加倍,中间加了一个不同类的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>
我想我的答案为时已晚,但这就是您需要的确切代码。