1. ホーム
  2. java

[解決済み] DocumentBuilder.parse が DTD 参照を無視するようにする。

2023-05-14 22:14:09

質問

このメソッドでxmlファイル(変数f)をパースすると、エラーが発生します。

C:\DesktopOnlineModule

私はdtdを持っていないし、必要ないことを知っています。 DTD 参照エラーを無視して、この File オブジェクトを Document オブジェクトにパースするにはどうしたらよいでしょうか?

private static Document getDoc(File f, String docId) throws Exception{
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(f);


    return doc;
}

どのように解決するのですか?

で提案されたものと同様のアプローチで @anjanb

    builder.setEntityResolver(new EntityResolver() {
        @Override
        public InputSource resolveEntity(String publicId, String systemId)
                throws SAXException, IOException {
            if (systemId.contains("foo.dtd")) {
                return new InputSource(new StringReader(""));
            } else {
                return null;
            }
        }
    });

単に空のInputSourceを返しても同じように機能することがわかりましたか?