※ ChatGPTを利用し、要約された質問です(原文:SAXでparseを行う際の、DTDとの妥当性チェックついて)
SAXでparseを行う際の妥当性チェックについて
このQ&Aのポイント
XMLのパーサーにxercesを利用している場合、SAXでparseを行う際には、DTDとの妥当性をチェックすることができます。
ただし、通常はカレントディレクトリにあるDTDファイルを参照してチェックしますが、ファイルを無視して指定した文字列でチェックを行うことも可能です。
具体的には、SAXParserFactoryクラスのsetValidatingメソッドをtrueに設定し、SAXParserクラスのparseメソッドでXMLをパースするときに、パースするXMLの妥当性をチェックすることができます。
SAXでparseを行う際の、DTDとの妥当性チェックついて
Java&XMLの初心者です。
用語の使い方など間違っているかもしれませんが、
よろしくお願いします。
XMLパーサーにxercesを利用しています。
以下のようなXMLをがあったときに、
<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "a.dtd">
<a>
<b>1</b>
<b>1</b>
</a>
以下のコードを実行すると、
SAXParserFactory f = SAXParserFactory.newInstance();
f.setValidating(true);
SAXParser p = f.newSAXParser();
p.parse((InputSource)xml, handler);
カレントディレクトリにあるa.dtdとの妥当性をチェックしますが、
これをファイルは無視し、指定した文字列とチェックをさせるなどと
いうことは可能でしょうか?
お礼
回答ありがとうございます。 いろいろ調べましたが、 「a.dtdというファイルからではなく、文字列としてDTDの定義を 保持しておき、文字列とXMLデータとの妥当性をチェックする」 という方法は無理なような気がしてきました。 読み込んだXMLファイルの<!DOCTYPE>を保持しているDTDに変えて、 parseすれば妥当性のチェックはできると思うので、そうします。 ありがとうございました。