您可以使用 Nokogiri 的 XML 解析器来解析 HTML,默认情况下它是严格的,但只提供一点帮助,因为它仍然会进行修复,因此 HTML/XML 稍微正确。通过调整您可以传递给解析器的标志,您可以使 Nokogiri 更加严格,因此它将拒绝返回无效文档。Nokogiri 不是消毒剂或所需标签的白名单。查看Loofah和Sanitize以了解该功能。
如果您的 HTML 内容位于名为 的变量中html
,并且您执行以下操作:
doc = Nokogiri::XML.parse(html)
然后检查doc.errors
是否有错误。Nokogiri 将尝试修复它们,但任何产生错误的东西都会被标记在那里。
例如:
Nokogiri::XML('<fb:like></fb:like>').errors
=> [#<Nokogiri::XML::SyntaxError: Namespace prefix fb on like is not defined>]
Nokogiri 将尝试修复 HTML:
Nokogiri::XML('<fb:like></fb:like>').to_xml
=> "<?xml version=\"1.0\"?>\n<like/>\n"
但它只会将其纠正到删除标记上的未知名称空间的程度。
如果要剥离这些节点:
doc = Nokogiri::XML('<fb:like></fb:like>')
doc.search('like').each{ |n| n.remove }
doc.to_xml => "<?xml version=\"1.0\"?>\n"