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>
Какой правильный способ сделать это?
Ответы
Ответ 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>
Я думаю, что мой ответ слишком поздний, но точные коды, которые вам нужны.