我在Java中写下了以下代码,但始终返回true。即使我修改XML并使XSD不兼容,它仍然返回true。请看看。
public static boolean isValidXML(String filePath,String xsdFile){
boolean bValue = true;
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder parser = documentBuilderFactory.newDocumentBuilder();
Document document = parser.parse(new File(filePath));
Schema schema = schemaFactory.newSchema(new File(xsdFile));
Validator validator = schema.newValidator();
final List<SAXParseException> exceptions = new LinkedList<SAXParseException>();
validator.setErrorHandler(new ErrorHandler()
{
public void warning(SAXParseException exception) throws SAXException
{
exceptions.add(exception);
}
public void fatalError(SAXParseException exception) throws SAXException
{
exceptions.add(exception);
}
public void error(SAXParseException exception) throws SAXException
{
exceptions.add(exception);
}
});
validator.validate(new DOMSource(document));
} catch (SAXException e) {
bValue = false;
logger.error("Error while Validating the XML."+e);
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bValue;
}
在您的ErrorHandler
接口实现中,尝试以下内容:
而不是
exceptions.add(exception);
做以下
throw exception;
您的实施可能会消耗验证异常。您也可以检查exceptions
并根据其内容返回。您为什么要填写以后再也不会使用的列表?