您可以使用 Nokogiri 轻松清洁它:
require 'nokogiri'
html = '<html><body><tr><table><tr><td>foo</td></tr></table></tr></body></html>'
doc = Nokogiri::HTML(html)
inner_table = doc.at('//body/tr/table')
if (inner_table)
doc.at('body tr').replace(inner_table)
end
puts doc.to_html
结果是:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><table><tr><td>foo</td></tr></table></body></html>
如果您的 HTML 更复杂,则找到某种类似于<body><tr><table>节点链的标记,并将其替换为上面的代码。
请注意,我混合了 XPath 和 CSS 访问器。我更喜欢 CSS 的可读性,但有时 XPath 更容易获得某些东西,或者更能自我记录。
另请注意,我在 Nokogiri 的at方法中同时使用了 XPath 和 CSS。尽管 Nokogiri 支持at,at_css和,但除非我需要明确告诉 Nokogiri 我使用的访问器是 CSS 或 XPath ,否则我at_xpath依赖它。at这是一个方便的事情。这同样适用于 Nokogiri 的search方法。