[英]JTidy reports “3 errors were found!”… but does not say what they are
我有一大堆以编程方式生成的HTML。 我使用以下Java代码通过Tidy(版本r938)运行了该代码:
StringReader inStr = new StringReader(htmlInput);
StringWriter outStr = new StringWriter();
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.parseDOM(inStr, outStr);
我得到以下输出:
InputStream: Document content looks like HTML 4.01 Transitional
247 warnings, 3 errors were found!
This document has errors that must be fixed before
using HTML Tidy to generate a tidied up version.
麻烦的是,Tidy没有告诉我发现了3个错误。
我在这里摆弄一点。 上面的输出实际上是所有247条警告的一长串(主要是修剪掉空的div
元素)。 我可以使用tidy.setShowWarnings(false)
禁止显示这些tidy.setShowWarnings(false)
; 无论哪种方式,我都看不到错误报告,因此无法弄清楚需要解决的问题。 300Kb的HTML对我来说实在太大了。
我尝试了多种方法来查找错误。 遗憾的是,由于HTML文件位于专有网络上,因此我无法通过validate.w3.org运行它。 最有用的方法是在IntelliJ IDEA中打开它。 这显示了十几个重复的div ID,我已对其进行了修复。 仍然发生错误。
我到处寻找有关此问题的其他提及。 当我发现诸如“如何使用JTidy如何从已解析的HTML中获取错误/警告消息?”之类的热门文章时, ,他们似乎都在要求不同的东西,或者假设条件根本不适合我。 例如,我得到的警告很好。 这是我需要的错误 ,即使我调用setShowErrors(100)
东西也没有得到报告。
我是否必须深入Tidy的源代码并对其进行调试,从报告错误的地方开始? 还是我可以做些更简单的事情?
这是我最终要找出错误的方法:
org.w3.tidy.Report.error()
的第一行增加lexer.errors
; 在词法分析器的许多地方调用error()
。 lexbuf
是一个字节数组,因此您的IDE可能不会将其显示为文本。 它也可能很大。 您可能想要查看lexbuf
的词法分析器正在查看的lexbuf
。 如有必要,请使用字节数组的该部分,并将其与ASCII表进行交叉引用以获取文本。 这比原本应该涉及的要复杂得多。 我怀疑Report.error()
被不当调用。
在我的情况下,使用常量BAD_CDATA_CONTENT
调用error()
。 此常量仅由Report.warning()
。 error()
不知道如何处理它,只是安静地退出,根本没有任何消息 。 如果将Lexer.getCDATA()
的调用从error()
更改为warning()
,则将获得错误的确切行和列。 (我也得到了看上去格式合理的XHTML,而不是空文档。)
我会向JTidy项目提交票证并提供一些建议,但是出于某些原因,SourceForge不允许我登录。 所以在这里:
script
元素内的注释;应该不会造成任何伤害。为防万一, 我问了另一个问题 。) Report.error()
应该有一个默认情况,如果它得到一个,它将报告未处理的错误代码。 希望这可以帮助其他任何有我猜测是深奥的问题的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.