import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.util.XMLErrorHandler;
import org.xml.sax.SAXException;
/**
* 使用Dom4j校验xml是否符合schema
* @author fengguang_cn
*
*/
public class XmlValidate {
/**
*
* @param dataxml
* @param schema
* @return 校验成功则返回true,否则返回false
* @throws SAXException
* @throws IOException
* @throws DocumentException
*/
public static boolean validate(String dataxml, String schema)
throws SAXException, IOException, DocumentException {
XMLErrorHandler errorHandler = new XMLErrorHandler();
Document document = null;
BufferedWriter out = null;
SAXReader reader = new SAXReader();
reader.setValidation(true);
reader.setFeature("http://xml.org/sax/features/validation", true);
reader.setFeature("http://apache.org/xml/features/validation/schema",
true);
String sysTempdir = System.getProperty("java.io.tmpdir");
String tempSchemaFileName = sysTempdir + "temp"
+ String.valueOf(Math.random()).substring(2) + ".xsd";
File f = new File(tempSchemaFileName);
f.createNewFile();
out = new BufferedWriter(new FileWriter(f));
out.write(schema);
out.close();
String uri = "file:" + tempSchemaFileName.replace('//', '/');
reader
.setProperty(
"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
uri);
reader.setErrorHandler(errorHandler);
document = reader.read(new ByteArrayInputStream(dataxml.getBytes()));
if (errorHandler.getErrors().hasContent()) {
System.out.println("xml不符合Schema:");
System.out.println((errorHandler.getErrors()));
f.delete();
return false;
} else {
f.delete();
return true;
}
}
/**
*
* @param dataxml
* @param schema
* @return 校验成功则返回document,如果失败则返回Null
* @throws SAXException
* @throws IOException
* @throws DocumentException
*/
public static Document validateWithDocRetrun(String dataxml, String schema)
throws SAXException, IOException, DocumentException {
XMLErrorHandler errorHandler = new XMLErrorHandler();
Document document = null;
BufferedWriter out = null;
SAXReader reader = new SAXReader();
reader.setValidation(true);
reader.setFeature("http://xml.org/sax/features/validation", true);
reader.setFeature("http://apache.org/xml/features/validation/schema",
true);
String sysTempdir = System.getProperty("java.io.tmpdir");
String tempSchemaFileName = sysTempdir + "temp"
+ String.valueOf(Math.random()).substring(2) + ".xsd";
File f = new File(tempSchemaFileName);
f.createNewFile();
out = new BufferedWriter(new FileWriter(f));
out.write(schema);
out.close();
String uri = "file:" + tempSchemaFileName.replace('//', '/');
reader
.setProperty(
"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
uri);
reader.setErrorHandler(errorHandler);
document = reader.read(new ByteArrayInputStream(dataxml.getBytes()));//ByteArrayInputStream(dataxml.getBytes("")));
if (errorHandler.getErrors().hasContent()) {
System.out.println("xml不符合Schema:");
System.out.println((errorHandler.getErrors()));
//f.delete();
return null;
} else {
//f.delete();
return document;
}
}
}
用xsd校验XML的工具类
最新推荐文章于 2021-12-02 16:12:01 发布