3. XML文書を読む2
2005.12.20 株式会社四次元データ 宮澤了祐
SAX 3章 XML文書を読む2
- 3.1. エラー通知を受け取る
- 3.2. DTDを利用した妥当性のチェック
- 3.3. 外部エンティティの解決
- 3.4. NOTATION宣言の取得
3.1. エラー通知を受け取る
DefaultHandlerではエラー通知を受け取る際に何もしていません。 もしエラーが発生した際に好きな処理を行いたい場合、以下の関数をオーバーロードする必要があります。
- void error(SAXParseException e)
- 回復可能なエラーの通知を受け取ります。
- void warning(SAXParseException e)
- 警告のエラー通知を受け取ります。
- void fatalError(SAXParseException e)
- 致命的な、回復不可能のエラー通知を受け取ります。
これらのエラーはW3CのXML1.0の勧告によって定められています。 以下は致命的なエラーが発生した場合のサンプルです。
public void fatalError(SAXParserException e) throws SAXParserException{ System.out.println( e.getLineNumber() + "行目に致命的なエラーが発生しました。" + "処理を中断します。"); }
SAXParserExceptionのgetLineNumber()メソッドで、エラーが発生したXMLが何行目かを知ることが出来ます。
3.2. DTDを利用した妥当性のチェック
SAXParserFactoryのsetValidation(boolean validating)メソッドにより、妥当性のチェックをする設定ができます。 ディフォルトはFalseになっています。
... SAXParserFactory sparser = SAXParserFactory.newInstance(); sparser.setValidating(true); SAXParser parser = sparser.newSAXParser(); ... parser.parse(new File("sample.xml"), new SaxSample());
public class SaxSample extends DefaultHandler{ ... public void error(SAXParseException e){ System.out.println(e.getLineNumber()+"行目にエラーがあります。"+e.getMessage()); } ... }
これにより、もしDTDにそぐわないXMLであれば、エラー通知関数であるvoid error(SAXParseException e)が呼ばれます。 以下はエラーの例です。
3行目にエラーがあります。Element type "root" must be declared.