/**
* 通过xsd校验数据正确性
*
*/
public static void validatexmlbyxsd() {
string xmlfilename = "d:\\test.xml";
string xsdfilename = "d:\\test.xsd";
try {
// 创建默认的xml错误处理器
xmlerrorhandler errorhandler = new xmlerrorhandler();
// 获取基于 sax 的解析器的实例
saxparserfactory factory = saxparserfactory.newinstance();
// 解析器在解析时验证 xml 内容。
factory.setvalidating(true);
// 指定由此代码生成的解析器将提供对 xml 名称空间的支持。
factory.setnamespaceaware(true);
// 使用当前配置的工厂参数创建 saxparser 的一个新实例。
saxparser parser = factory.newsaxparser();
// 创建一个读取工具
saxreader xmlreader = new saxreader();
// 获取要校验xml文档实例
document xmldocument = (document) xmlreader.read(new file(
xmlfilename));
// 设置 xmlreader 的基础实现中的特定属性。核心功能和属性列表可以在
// [url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。
parser.setproperty(
"http://java.sun.com/xml/jaxp/properties/schemalanguage",
"http://www.w3.org/2001/xmlschema");
parser.setproperty(
"http://java.sun.com/xml/jaxp/properties/schemasource",
"file:" + xsdfilename);
// 创建一个saxvalidator校验工具,并设置校验工具的属性
saxvalidator validator = new saxvalidator(parser.getxmlreader());
// 设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。
validator.seterrorhandler(errorhandler);
// 校验
validator.validate(xmldocument);
outputformat format = outputformat.createprettyprint();
format.setencoding("utf-8");
format.setencoding("gbk");
xmlwriter writer = new xmlwriter(format);
// 如果错误信息不为空,说明校验失败,打印错误信息
if (errorhandler.geterrors().hascontent()) {
system.out.println("xml文件通过xsd文件校验失败!");
writer.write(errorhandler.geterrors());
} else {
system.out.println("good! xml文件通过xsd文件校验成功!");
}
} catch (exception ex) {
system.out.println("xml文件: " + xmlfilename + " 通过xsd文件:"
+ xsdfilename + "检验失败。\n原因: " + ex.getmessage());
ex.printstacktrace();
}
}