我正在寻找一种方法来根据内部模式验证我的XML文件。目前这是我的代码。使用内部架构验证XML返回一个布尔值
final SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
SAXParser parser;
parser = factory.newSAXParser();
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
final XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(new SAXErrorHandler());
reader.parse(new InputSource(doc));
那么它的作用是报告验证错误,如果它是非致命错误和解析可以继续警告。这很好,因为我可以看到更多的错误,如果它只是打破并引发异常。
但是它不确实正在代码中的可用信息给我,让我可以有一个方法boolean validate()
返回是否存在或不存在错误(警告)
所以我想到了一个自己的实例ErrorHandler的属性,我可以抢在解析完成后,但这听起来对我来说并不酷:)
接下来的事情是解析这样的解析需要一些时间,只需使用验证器可以显着更快(和是这是时间关键;)),但因为我需要内部模式进行验证,所以我不知道如何完全解析。
我经过这里的SO各种问题,所有建议哪些需要外接方案Validator类阅读。也许我错了,但我认为Validator并不像解析器那样构建完整的DOM树,因此速度更快。 我希望能找到比自定义的ErrorHandler更流畅的东西,但我会试一试;)。感谢您的回答。 –
@DennisIch - SAX解析器根本不构建DOM树。它所做的只是将事件传递给处理程序。 – jtahlborn
很高兴知道,谢谢你在这里的帮助。 –