How to apply validation of local DTD file to xml file in java?
Asked Answered
E

1

5

I need to parse a bunch of incoming XML documents but it does not contain DTD declaration. Currently I am parsing xml documents using SAX Parser but without DTD validation. Now I want to apply DTD validation. DTD is created by myself. How can I validate an XML file using DTD created by myself (SAX parser) ? I found some tutorials using Transformer but all for DOM Parser.

How to parse XML file using SAX Parser and also applying DTD validation. Any help....

Elenore answered 11/11, 2011 at 8:44 Comment(0)
M
2

Below is a sample that I believe could help to do what you want:

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;
    }
}
Moria answered 11/11, 2011 at 10:23 Comment(3)
parserFactory.setValidating(true); line gives Parserconfigurationexception in android and give warning that no implementation of validation is supported. It works in java but not in android. Is there any other method to give dtd validation in android?Elenore
@Mdroid, sorry, probably I've missed "android" tag. The question itself do not state that it is about android platform. Did you solve the problem?Moria
Sorry I didn't mention "Android platform" in question. And currently I have no more work around on this.Elenore

© 2022 - 2024 — McMap. All rights reserved.