目次へ

3. XML文書を読む2

2005.12.20 株式会社四次元データ 宮澤了祐

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.

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ