我正在寻找一种方法来根据内部架构验证我的 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 实例,它有一个属性,我可以在解析完成后获取它,但这对我来说听起来并不酷:)
接下来的事情是解析这样的解析需要一些时间,并且仅使用验证器可能会明显更快(是的,这里的时间很关键;))但是因为我需要内部模式进行验证,所以我不知道如何不完全解析。