Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据XSD验证完整的XML_Java_Xml_Xml Parsing_Xsd - Fatal编程技术网

Java 根据XSD验证完整的XML

Java 根据XSD验证完整的XML,java,xml,xml-parsing,xsd,Java,Xml,Xml Parsing,Xsd,我想根据XSD完全验证XML,这意味着我希望文件从引发异常的同一点继续验证 这是我的代码: public void validate(File file) { try { Source xmlFile = new StreamSource(file); try { System.out.println("Processing : " + file.getAbsolutePath()); System.o

我想根据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的所有错误?简而言之,从引发异常的游标继续验证。 有出路吗


谢谢

默认错误处理程序的行为是通过抛出
SAXException
在遇到第一个致命错误后停止处理。要改变这种行为,请实现您自己的行为,并向验证器注册它

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

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

无法根据XSL文件验证XML。您可以根据模式(XMLSchema、DTD、RelaxNG等)进行验证,但不能根据样式表进行验证。