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....
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;
}
}