gpt4 book ai didi

java - 针对 XSD 验证完整的 XML

转载 作者:行者123 更新时间:2023-11-30 09:03:07 24 4
gpt4 key购买 nike

我想根据我的 XSD 完全验证我的 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);
}
}

这里根据这个片段,在仅出现一次异常之后,代码返回错误并停止验证进一步的 XML。但是有什么方法可以针对 XSD 获取 XML 的所有错误吗?简而言之,从抛出异常的游标继续验证。有出路吗??

谢谢!

最佳答案

默认错误处理程序的行为是在遇到第一个 fatal error 后通过抛出 SAXException 停止处理。要改变此行为,请实现您自己的 ErrorHandler并将其注册到您的 validator 。

这是一个将异常转储到标准输出的示例,但您可能希望将其替换为更智能的报告机制。

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());

关于java - 针对 XSD 验证完整的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com