重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になります。

<?xml version="1.0"?>
<!DOCTYPE A [
<!ELEMENT A (B)>
]>
<A>
</A>

上記のXMLをSAXにてparseをかけると多分「定義とちがうじゃん!」というような趣旨のエラーがでるとおもっていたのですが、普通に処理されてしまいました。
DTDのチェックってどうやってやるのでしょうか?

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser parser = factory.newSAXParser();
parser.parse(xmlFile, new DefaultHandler()を拡張したクラス);

このようなかんじでやっているのですが、
これがまちがえていますか?

SAXのバージョンとかも関係するのかもしれないのですが、
これ使ってともらったやつなのでどのように調べていいのかわかりません。

以上よろしくお願い致します。

A 回答 (1件)

DefaultHandlerはErrorHandlerを実装していますが、


この中のerror()メソッドはオーバーライドしていますか?
妥当でない場合にはこのerror()メソッドが呼び出されるようになっています。
(データとしては致命的ではないのでparse()メソッドに対する例外は発生しません)

DeafaultHandlerを拡張したクラスに
public void error(SAXParseException exp){
System.out.println("妥当でないかも");
}
の記述を追加してみてください。

詳しくはAPIドキュメントのorg.xml.sax.ErrorHandlerを確認してみてください。
    • good
    • 0
この回答へのお礼

早速のご解答ありがとうございます。

アドバイスを参考にやってみたところできました。
自分としてはDTDのそぐわないとなにかすごい例外がでて
処理がストップするものだと思っていました。
仕様としてこうなっているのですね。

APIもこういうところまで読まないとだめですね。。。

ありがとう御座いました。

お礼日時:2003/09/08 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!