1

Java SAX パーサー (org.xml.sax.ext.DefaultHandler2 の実装) を使用して XML ドキュメントを解析していますが、このドキュメントには DTD を指す DOCTYPE 宣言が含まれています。奇妙な理由で、元のドキュメントに「doctype」キーワード自体が記述されているケースを知る必要があるため、まったく同じケースを使用してドキュメントを出力できます。

これは、次のように区別できる必要があります。

<!DOCTYPE thing SYSTEMID ...>

...から:

<!doctype thing SYSTEMID ...>

パーサー自体からそれを達成する方法はありますか? (つまり、パーサーを実行する前にストリームの最初の n バイトを読み取ることに頼らずに)

ありがとう

4

2 に答える 2

3

入力が XML の場合、DOCTYPE は大文字です。逆に、DOCTYPE が小文字の場合、入力は XML ではありません。したがって、SAX パーサーが DOCTYPE 宣言を正常に通過した場合は、それが大文字であったことがわかります。

于 2012-04-25T15:23:08.143 に答える
2

最後に、Java XML パーサーが DOCTYPE 節の元の大文字小文字について教えてくれる方法はないようです。そのような XML パーサーを使用して HTML5 を解析しようとする場合は true)。

これを解決する方法は、独自の java.io.Reader を実装することでした。これにより、ファイルのバイトを読み取り、DOCTYPE 句の元のケースを判別し、XML SAX パーサーでこの Reader を使用できるようになりました。解析が完了したら、その節の場合はどうだったのかをリーダー オブジェクトに尋ね、正しい答えを得ることができます。

面倒で醜いですが... 唯一の現実的な選択肢のようです.

于 2012-05-29T15:34:25.490 に答える