1、需要maven依赖,版本的话根据自己需求来定
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
2、代码案例
XMLErrorHandler xmlErrorHandler = new XMLErrorHandler();//xml默认的错误处理器
SAXParserFactory factory = SAXParserFactory.newInstance();//获取基于SAX的解析器实例
factory.setValidating(true);//解析器在解析xml内容
factory.setNamespaceAware(true);//解析器对xml名称空间的支持
SAXParser saxParser = factory.newSAXParser();//使用当前配置的工厂参数,创建一个新的SAXParser实例
SAXReader xmlReader = new SAXReader();//创建一个读取文件
Document xmlDocument = xmlReader.read(new File("xml文件的路径"));
saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage","http://www.w3.org/2001/XMLSchema");
saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource","file:"+"xsd文件路径");
SAXValidator validator = new SAXValidator(saxParser.getXMLReader());
validator.setErrorHandler(xmlErrorHandler);//设置校验工具的错误处理器,当发生错误时,可以从处理对象中获取错误信息
//开始校验xml
validator.validate(xmlDocument);
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
/**
* 判断校验xml文件是否存在错误信息
*/
if (xmlErrorHandler.getErrors().hasContent()){
Element errors = xmlErrorHandler.getErrors();//获取错误信息
List<Node> list = errors.content();
writer.write(xmlErrorHandler.getErrors());
int count = 0;//记录xsd校验xml出现的错误次数
String resultError = "";//拼接校验的xml错误信息
for (Node node : list) {
String error = node.getText().split(":")[1];
if (error.contains("元素") && error.contains("无效")){
count++;
resultError += error;
}
}
System.out.println("共有"+count+"处错误");
System.out.println(resultError);
}
} catch (Exception e) {
e.printStackTrace();
}