如何在xsd验证xml后列出所有错误?
问题描述:
我已经在网上搜索并尝试了几天,但我仍然无法列出所有的错误,我只能显示1错误。为什么?我需要列出所有的错误。希望有人帮助我。以下是我的验证和错误处理程序代码。程序只进入error(),并且只进行一次。它错误的第一个元素,但也有其他元素丢失在XML中,它不显示它们。如何在xsd验证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());
}
}
}
下面是我的ErrorHandler
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());
}
}
答
首先,这取决于你所使用的架构验证。 JAXP接口被设计为与各种模式验证器一起工作。如果您使用的是JDK附带的默认版本,则应该通知我们。
所有验证器都能够从一些错误中恢复而不是其他的,所以我们需要知道的另一件事是特定的错误是什么。发布标本XSD和XML是非常有用的,因此我们可以比较结果。
如果您想考虑使用Saxon作为您的模式验证引擎,那么您可以选择向您提供XML报告中所有验证错误的列表,您可以使用XSLT格式化为自己的需求。
我根本没有看到任何列表。 – shmosel