我想根据我的XSD COMPLETELY 验证我的XML,这意味着我希望文件从抛出异常的同一点继续验证。
这是我的代码:
public void validate(File file) {
try {
Source xmlFile = new StreamSource(file);
try {
System.out.println("Processing : " + file.getAbsolutePath());
System.out.println(validator);
validator.validate(xmlFile);
// stringBuffer.append(" is valid");
} catch (SAXException e) {
fileWriter.write("\n\n\n" + file.getAbsolutePath());
System.out.println(xmlFile.getSystemId() + " is NOT valid");
System.out.println("Reason: " + e.getLocalizedMessage());
fileWriter.write("\nReason: " + e.getLocalizedMessage());
if (e instanceof SAXParseException) {
fileWriter.write(" (Line : "
+ ((SAXParseException) e).getLineNumber()
+ ", Col : "
+ ((SAXParseException) e).getColumnNumber() + ")");
}
fileWriter.flush();
validate(file);
}
} catch (Exception exception) {
exception.printStackTrace(System.out);
}
}
根据这个片段,在JUST ONE EXCEPTION之后,代码返回错误并停止验证更多的XML ..但有没有办法在XSD上获取XML的所有错误?简而言之,从光标继续验证它抛出异常的位置。 任何方式?
谢谢!
答案 0 :(得分:2)
默认错误处理程序的行为是在抛出SAXException
遇到第一个致命错误后停止处理。要更改此行为,请实施您自己的ErrorHandler
并将其注册到验证程序。
这是一个将异常转储到标准输出的示例,但您可能希望将其替换为更智能的报告机制。
class CustomErrorHandler implements ErrorHandler {
public void fatalError(SAXParseException e) throws SAXException {
System.out.println(e.toString());
}
public void error( SAXParseException e ) throws SAXException {
System.out.println(e.toString());
}
public void warning( SAXParseException e ) throws SAXException {
System.out.println(e.toString());
}
}
然后:
validator.setErrorHandler(new CustomErrorHandler());