Ссылаясь на локальный DTD в Java - PullRequest
9 голосов
/ 13 июня 2011

У меня есть какой-то XML, который я анализирую с помощью синтаксического анализатора SAX в Java.Он начинается с этой преамбулы:

<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 3.0//EN"
           "http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">

Как мне изменить это на использование локального DTD?

Я полагаю, я мог бы сделать что-то вроде этого:Не совсем так, но что-то вроде .Однако мне нужно, чтобы путь был независимым от системы пользователя.

Как использовать локальное DTD с путем относительно пути к классу?

Ответы [ 4 ]

4 голосов
/ 28 июля 2016

Решение состоит в том, чтобы указать местоположение файла DTD в системе, используя classpath.Таким образом, DocType, который работал в автономном режиме, будет:

<!DOCTYPE hibernate-configuration SYSTEM 
    "classpath://org/hibernate/hibernate-configuration-3.0.dtd">
4 голосов
/ 10 июня 2014

При работе с веб-приложениями вы можете поместить dtd в папку lib и обращаться к ней следующим образом:

<!DOCTYPE name PUBLIC 
    "-//CMP//DTD dtdName 1.0//EN"
        "/WEB-INF/lib/dtdName.dtd">
4 голосов
/ 13 июня 2011

Взгляните на эту статью об использовании каталогов XML для локального разрешения DTD без необходимости изменения источника XML.Основные шаги:

  1. создание файла XML, который сопоставляет системные идентификаторы с локальными DTD
  2. изменение кода для создания экземпляра и настройка CatalogResolver
  3. для предоставления CatalogResolverчитатель XML (полученный от парсера)
0 голосов
/ 22 мая 2015

Также другим способом может быть сохранение dtd на локальном хосте, так что окончательный путь становится примерно таким:

<!DOCTYPE hibernate-configuration SYSTEM 
          "http://localhost/hibernate-configuration-3.0.dtd">

Определенно, не самое элегантное решение, но, безусловно, работает.

...