1

(これは数日前に発生した問題のフォローアップです。JTidy は 300k の HTML ドキュメント内で 3 つのエラーを報告していましたが、どこで報告していませんでした。問題を少し掘り下げた後、エラーの原因と思われるものを見つけました。私はその理由について強い疑いを持っていますが、それについてどうするかはまだ決めていません.)

以下は、JTidy がエラーを報告する小さなスタンドアロン HTML 式です。

<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 でのみ壊れているようです。

もう少し検索すると、SourceForge ページによると、最新の JTidy を使用していることがわかりました。バージョン r938 は、私の Maven リポジトリにあるバージョンです。(実際には、この問題をデバッグできるように、ソースはサンドボックスに解凍されています。) 上でリンクしたバグ レポートは 2015 年のものです。JTidy r938 は 2009 年に登場しました。

JTidyがこれを間違って処理していると信じているのは正しいですか? もしそうなら、私はそれを修正しようとするべきですか、それともいくつかのプライベートブランチで対処されていますか? 私は自分自身をパーサー/レクサーの専門家とは呼びませんが、必要に応じて混乱することはできます。

4

1 に答える 1

1

これは確かに JTidy のバグです。悲しいことに、私はすでにそれ (およびその他の問題) を修正していましたが、JTidy に取り組む時間がなくなったため、新しいリリースを作成することにはなりませんでした。

コードは subversion で利用できます。trunk から最新のリビジョンをチェックアウトしてビルドすると、プログラムが動作するはずです。

CodeUpdateAndJava5 というブランチも作成しました。このブランチでは、(html5 バージョンでの作業を開始する前に) コードを tidy ツールの動作に近づけ、最新の Java 機能の追加を開始しました。そのコードも機能します。ただし、それに基づくリリースは公開しませんでした。

必要なものによっては、jsoup ライブラリーの方が適切に機能する可能性があり、維持および更新されています。

于 2017-01-03T20:47:17.623 に答える