我在网上搜索了几天,但我仍然无法列出所有错误,我只能显示1个错误。为什么?我需要列出所有的错误。希望有人帮助我。下面是我的验证和错误处理程序代码。程序只转到error(),只转一次。第一个元素的错误,但XML中也缺少其他元素,它不显示它们。
import java.io.File;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
public class XMLValidate1 {
public static void main(String[] args) throws SAXException, IOException {
SchemaFactory factory
= SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
File schemaLocation = new File("Q1.xsd");
Schema schema = factory.newSchema(schemaLocation);
Validator validator = schema.newValidator();
validator.setErrorHandler(new ValidateErrorHandler());
Source xmlFile = new StreamSource(new File("Q1.xml"));
try {
validator.validate(xmlFile);
System.out.println(xmlFile.getSystemId() + " is valid.");
}
catch (SAXException ex) {
System.out.println(xmlFile.getSystemId() + " is not valid because ");
System.out.println(ex.getMessage());
}
}
}
以下是我的错误处理程序
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class ValidateErrorHandler implements ErrorHandler {
public void warning(SAXParseException ex) {
System.out.println("Warning: ");
System.err.println(ex.getMessage());
}
public void error(SAXParseException ex) {
System.out.println("Error: ");
System.err.println(ex.getMessage());
}
public void fatalError(SAXParseException ex) throws SAXException {
System.out.println("Fatal error: ");
System.err.println(ex.getMessage());
}
}
答案 0 :(得分:2)
首先,这取决于您使用的架构验证程序。 JAXP接口旨在与各种模式验证器配合使用。如果您使用的是JDK附带的默认版本,请告知我们。
所有验证器都能够从某些错误而不是其他错误中恢复,因此我们需要知道的另一件事是特定错误是什么。发布样本XSD和XML以便我们比较结果会很有用。
如果您想考虑使用Saxon作为模式验证引擎,它可以选择在XML报告中列出所有验证错误,您可以使用XSLT格式化为您自己的要求。