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.textnode.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(你的,加倍,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 回答