(这是我几天前的a problem的后续内容,其中JTidy在300k HTML文档中报告了3个错误,但没有报告在哪里。经过一些研究,我发现了什么似乎导致错误,我对此有强烈的怀疑,但我还没决定该怎么做。)
这是一个小的独立HTML表达式,导致JTidy报告错误:
<html>
<body>
Some text.
<script type="text/javascript">
var foo = "Press <u>ESC</u> to continue";
</script>
</body>
</html>
Javascript字符串常量包含HTML标记,这些一致地抛出JTidy - 删除下划线元素,JTidy完美解析。更准确地说,JTidy的解析器在结束标记上报告错误;开始标记很好(输出可能有些错误,但对我以后的目的来说已经足够了)。即使您注释掉字符串,错误也会报告:
// Any closing tags here at all will <b>throw JTidy off</b>.
我认为上述内容是有效的HTML是安全的。但我找不到任何关于如何处理它的文件。搜索周围,我发现this has been fixed in tidy-html5;它似乎只在Java端口JTidy中被破坏了。
根据其SourceForge page,我发现我正在使用最新的JTidy;版本r938是我的Maven回购中的一个。 (实际上,源是在沙盒中解压缩的,所以我可以调试这个问题。)我上面链接的错误报告是2015年的日期; JTidy r938于2009年问世。
我是否相信JTidy处理错误?如果是这样,我应该尝试解决它,还是已经在某个私人分支中解决了?我不会称自己为解析器/词法分析专家,但如果必须的话,我可能会糊里糊涂。
答案 0 :(得分:1)
这确实是JTidy中的一个错误。可悲的是,我已经解决了(以及其他问题),但最终没有发布新版本,因为我没有时间再研究JTidy了。
代码在subversion中可用,如果你从trunk查看最新版本并构建它,你的程序应该可以工作。
我还创建了一个名为CodeUpdateAndJava5的分支,在其中我将代码更接近整洁工具的行为(在他们开始处理html5版本之前)并开始添加更多现代java功能。该代码也可以工作;虽然我没有基于它发布任何版本。
根据您的需要,jsoup library可能会更适合您,并且可以维护和更新。