Удалите все теги tbody, не уничтожая их детей - PullRequest
2 голосов
/ 23 апреля 2010

Этот код Ruby с использованием Nokogiri

doc.xpath("//tbody").remove

удаляет потомков <tbody> (а также самих <tbody>).Я только хочу удалить все теги <tbody> из документа, оставив их детей на месте.Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010
require 'rubygems'
require 'nokogiri'

html = Nokogiri::HTML(DATA)
html.xpath('//table/tbody').each do |tbody|
  tbody.children.each do |child|
    child.parent = tbody.parent
  end
  tbody.remove
end

puts html.xpath('//table').to_s

__END__
<table border="0" cellspacing="5" cellpadding="5"><tbody>
<tr><td>Data</td></tr>
<tr><td>Data2</td></tr>
<tr><td>Data3</td></tr>
</tbody></table>

печать

<table border="0" cellspacing="5" cellpadding="5">
<tr><td>Data</td></tr>
<tr><td>Data2</td></tr>
<tr><td>Data3</td></tr>
</table>
1 голос
/ 16 ноября 2012

Вы хотите заменить каждый tbody на своих детей? Тогда это все, что вам нужно сказать:

require 'nokogiri'
html = Nokogiri::HTML.fragment(DATA.read)
html.css('tbody').each{ |tbody| tbody.replace tbody.children }
puts html

__END__
<table><tbody>
  <tr><td>Data</td></tr>
  <tr><td>Data2</td></tr>
</tbody><tbody>
  <tr><td>Data3</td></tr>
</tbody></table>

Производство:

<table>
<tr><td>Data</td></tr>
<tr><td>Data2</td></tr>
<tr><td>Data3</td></tr>
</table>
...