Скажите JAXP путь к файлу DTD

У меня есть XML-файлы со ссылкой на файл Dtd.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE varman SYSTEM "referenced.dtd">
...

Мне удалось прочитать эти файлы с помощью JAXP, но только если файл referenced.dtd находится в той же папке, что и файл XML. В противном случае я получаю исключение, что файл dtd не может быть загружен. И я не мог найти место, куда вставить обработчик или что-нибудь, чтобы решить этот пропавший ресурс. Пожалуйста, дайте мне просветление!

1 ответ

Используйте настройки свойств, чтобы разрешить внешние пути:

Добавьте обработчик ошибок, чтобы перехватить неподдерживаемые свойства:

public boolean isNewPropertySupported() {
       try {
           SAXParserFactory spf = SAXParserFactory.newInstance();
           SAXParser parser = spf.newSAXParser();
           parser.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", "file");
       } catch (ParserConfigurationException ex) {
           fail(ex.getMessage());
       } catch (SAXException ex) {
           String err = ex.getMessage();
           if (err.indexOf("Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.") > -1)
           {
             //expected, jaxp 1.5 not supported
             return false;
           }
       }
       return true;
  }
Другие вопросы по тегам