以下是说明问题的测试用例:
def test_strict_Nokogiri
html = "<script> $('<a></a>') </script>"
doc = Nokogiri::HTML(html, nil, nil, Nokogiri::XML::ParseOptions::STRICT)
assert_empty doc.errors
end
该断言失败,因为有errors
:#<Nokogiri::XML::SyntaxError: Unexpected end tag : a>
。
即使Nokogiri一直在<script>
标记内查找HTML标记,也应该看到<a ...>
和</a>
标记是平衡的,对吗?
如何让Nokogiri识别有效的HTML,绕过嵌入式Javascript,只会抱怨它真的坏了?
编辑:我已将错误传递给libxml2维护者:https://bugzilla.gnome.org/show_bug.cgi?id=795390答案 0 :(得分:0)
如果你想从Nokogiri元素中删除脚本标签,你可以这样做,
html = '<div> Hello </div> <script> $("<div></div>") </script>'
doc = Nokogiri::HTML(html, nil, nil, Nokogiri::XML::ParseOptions::STRICT)
doc.text # " Hello $(\"<div>\") "
doc.xpath('//script').remove
doc.text # " Hello "
doc.to_html
将返回此
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n<div> Hello </div> </body></html>\n"