1

(这是我几天前遇到的一个问题的后续,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;但我找不到任何关于如何处理的文档。环顾四周,我发现这已在 tidy-html5 中修复;它似乎只在 Java 端口 JTidy 中被破坏。

再搜索一下,我发现我使用的是最新的 JTidy,根据它的SourceForge 页面;r938 版本是我的 Maven 存储库中的版本。(实际上,源是在沙箱中解压的,所以我可以调试这个问题。)我上面链接的错误报告是 2015 年的;JTidy r938 于 2009 年问世。

我是否认为 JTidy 处理不正确?如果是这样,我应该尝试修复它,还是在某个私人分支中解决了它?我不会称自己为解析器/词法分析器专家,但如果必须,我可以应付自如。

4

1 回答 1

1

这确实是 JTidy 中的一个错误。可悲的是,我已经修复了它(和其他问题),但最终没有发布新版本,因为我没有时间再研究 JTidy。

该代码在 subversion 中可用,如果您从主干检查最新版本并构建它,您的程序应该可以工作。

我还创建了一个名为 CodeUpdateAndJava5 的分支,在其中我使代码更接近于 tidy 工具的行为(在他们开始使用 html5 版本之前)并开始添加更多现代 Java 功能。该代码也可以使用;我没有发布任何基于它的版本。

根据您的需要,jsoup 库可能更适合您,并且正在维护和更新。

于 2017-01-03T20:47:17.623 回答