How to ignore inline DTD when parsing XML file in Java
dtd, java, sax, xml
Solution
I suspect that the nodes that were previously being reported to the `characters()` callback are now being reported to the `ignorableWhitespace()` callback. The simplest solution might be to simply call `characters()` from `ignorableWhitespace()`.
This is what the spec has to say about `ignorableWhitespace()`:
Validating Parsers must use this method to report each chunk of whitespace in element content (see the W3C XML 1.0 recommendation, section 2.10): non-validating parsers may also use this method if they are capable of parsing and using content models.
In other words, if there is a DTD, and if you are not validating, then it's up to the parser whether it reports whitespace in element-only content models using the `characters()` callback or the `ignorableWhitespace()` callback.
Problem
I have a problem reading a XML file with DTD declaration inside (external declaration is solved). I'm using SAX method (javax.xml.parsers.SAXParser). When there is no DTD definition parsing looks like for example StartEement-Characters-StartElement-Characters-EndElement-Characters...... So there is characters method called immediately after Start or End element and thats how I need it to be. When DTD is in file parsing schema changes to for example StartElement-StartElement-StartElement-Characters-EndEement-EndEement-EndEement. And I need Characters method after every element. So I'm asking is there any way to prevent change of parsing schema? My code: ``` SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(false); SAXParser parser = factory.newSAXParser(); XMLReader reader = parser.getXMLReader(); reader.setFeature("http://xml.org/sax/features/validation", false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); reader.setFeature("http://xml.org/sax/features/use-entity-resolver2", false); reader.setFeature("http://apache.org/xml/features/validation/unparsed-entity-checking", false); reader.setFeature("http://xml.org/sax/features/resolve-dtd-uris", false); reader.setFeature("http://apache.org/xml/features/validation/dynamic", false); reader.setFeature("http://apache.org/xml/features/validation/schema/augment-psvi", false); reader.parse(input); ``` There is XML file that I'm trying to parse link (its link on my dropbox).