SAX Parser: укажите местоположение DTD в апплете - PullRequest
1 голос
/ 23 июня 2011

У меня есть апплет, который отлично работает в средстве просмотра апплетов, но после развертывания на сервере он не может анализировать файлы XML

причина проста: анализатор SAX пытается открыть dtd нажесткий диск, а не в JAR.

Мне было сказано сделать это:

URL-адреса к ресурсам могут быть легко сформированы с помощью конструктора URL (baseURL, pathString), где базовый URLполучается из Applet.getDocumentBase () или Applet.getCodeBase ().

, но я не знаю, как применить это в моем случае:

вот пример XML:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "leveldtd.dtd">   
<level>
...
</level>

и вот инициация моего парсера

public static void parseThis(InputSource is) throws Exception{
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
        XMLReader xr = sp.getXMLReader();
        xr.setContentHandler(myExampleHandler);
        /* Begin parsing */ 
        xr.parse(is);
    }

есть идеи?

Джейсон

1 Ответ

0 голосов
/ 23 июня 2011

Если проверка не требуется, вы можете просто включить ее в SAXParserFactory.setValidating () , чтобы анализатор не пытался читать DTD.

Если вам, однако, требуется проверка, вы можете перенаправить любые запросы DTD / XSD, установив свой собственный EntityResolver в синтаксическом анализаторе саксофона.

...