- PR -

JAXPのDTD検証無視

1
投稿者投稿内容
るーさん
常連さん
会議室デビュー日: 2003/12/14
投稿数: 28
投稿日時: 2006-07-25 15:39
JAXPを使ってXMLの解析を行っているのですが、
XMLに含まれるDTD定義のパスが間違っているので、
XML解析でDTDの検証をするのを無視したいのですが、方法が分からないので
ご存じなら教えて頂けないでしょうか。

コード:
DocumentBuilderFactory factory = DocumentBuilderFactory
		.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xml);



builder.parseの行で、DTDのパスが見つかりませんというエラーになります。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-07-25 16:58
「間違ったDTDパスだったら空のStringReaderのInputSourceを返すEntityResolver」を用意してbuilder.setEnittyResolver(...)で登録すれば無視できるかもしれません。
るーさん
常連さん
会議室デビュー日: 2003/12/14
投稿数: 28
投稿日時: 2006-07-25 18:13
回答ありがとうございます。
ご指摘の方法で解決出来ました。

しかし、何かオプションがあると思ったのですが、結構めんどくさいんですね。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-07-25 18:29
妥当性検証がオフでも、XMLパーザは指定されたDTDを読まないわけには行かないので、仕方がないところですね。(一般実体の定義などがDTD内にあるかもしれないため)
1

スキルアップ/キャリアアップ(JOB@IT)