Как применить проверку локального файла DTD для XML-файла в Java? - PullRequest
5 голосов
/ 11 ноября 2011

Мне нужно проанализировать несколько входящих XML-документов, но они не содержат декларации DTD. В настоящее время я анализирую документы XML с использованием SAX Parser, но без проверки DTD. Теперь я хочу применить проверку DTD. DTD создан мной. Как я могу проверить файл XML, используя DTD, созданный мной (SAX-парсер)? Я нашел несколько руководств, использующих Transformer, но все для DOM Parser.

Как проанализировать XML-файл с помощью SAX Parser, а также применить проверку DTD. Любая помощь ....

1 Ответ

2 голосов
/ 11 ноября 2011

Ниже приведен пример, который, как я считаю, может помочь сделать то, что вы хотите:

private void loadXML(Reader reader) throws ParserConfigurationException, SAXException {
    SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    parserFactory.setValidating(true);
    SAXParser parser = parserFactory.newSAXParser();
    parser.parse(new InputSource(reader), new MyHandler());
}

private static class MyHandler
        extends DefaultHandler {

    private static final String PREFS_DTD_URI = "http://www.example.com/dtd/document.dtd";

    public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
        if (systemId.equals(PREFS_DTD_URI)) {
            InputSource is = new InputSource(new StringReader(PREFS_DTD));  // PREFS_DTD is a string containing actual DTD, any other Reader could be here
            is.setSystemId(PREFS_DTD_URI);
            return is;
        }
        // else use the default behaviour
        return null;
    }
}
...