剥离所有tbody标签而不破坏他们的孩子

时间:2010-04-23 06:02:40

标签: ruby nokogiri

使用Nokogiri

的Ruby代码
doc.xpath("//tbody").remove

删除<tbody>的子项(以及<tbody>本身)。我只想从文档中删除所有<tbody>标记,将其子项留在原位。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

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 :(得分:1)

您想要将每个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>