tohokuaikiのチラシの裏

技術的ネタとか。

dom4jでバリデーションを効かせたくないのでいろいろやった結果

いちいちhttpでDTD取ってこられると大変なので、ローカルに置いたものでValidationしてほしいわけで。ところがDOCTYPEの書き換えをしようとする際にもこのDTDバリデーションをしてしまってては意味がないわけでして。

dom4jのDocumentみると

dom4j - Frequently Asked Questions

// turn validation on
SAXReader reader = new SAXReader(true);

とか書かれててるんだけどこれをfalseにしてもValidationしてしまう。

IDEでsetValidation(boolean validating)が出てきたのだけど・・・

これで

reader.setValidation(false);

とかしてもダメ。Validationしてしまう。

で見つけたのがこの記事

Disable DOM DTD validation - Ruben Laguna's blog

//factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); // it doesn't work
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

でようやく効いた。