我在读取带有 DTD 声明的 XML 文件时遇到问题(外部声明已解决)。我正在使用 SAX 方法 (javax.xml.parsers.SAXParser)。当没有 DTD 定义解析时,例如 StartEement-Characters-StartElement-Characters-EndElement-Characters...... 所以在 Start 或 End 元素之后立即调用了 characters 方法,这就是我需要的方式。当 DTD 在文件解析模式更改为例如 StartElement-StartElement-StartElement-Characters-EndEement-EndEement-EndEement 时。而且我需要在每个元素之后使用 Characters 方法。所以我问有没有办法防止解析模式的改变?
我的代码:
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);
我正在尝试解析链接的 XML 文件(它在我的保管箱上的链接)。