Подтвердить что ты не робот

Nokogiri, чтобы получить raw html node

Я использую Nokogiri для анализа некоторого html. Но я не знаю, как получить исходный HTML-код внутри node. Например, данный:

<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

Я хотел бы получить весь необработанный html внутри блока tr. В этом случае:

<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>

Какой правильный способ сделать это?

4b9b3361

Ответ 1

Используйте 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>
----------------------------------------

Ответ 2

Вы можете добавить 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

Надеюсь, это поможет вам.

Ответ 3

Правильный метод .children. Он возвращает весь html внутри выбранного элемента.

Итак, имея этот код:

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

И используя этот процесс:

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

Вернет этот html:

<td>value</td>

Я думаю, что мой ответ слишком поздний, но точные коды, которые вам нужны.