关于XML的验证(DTD与XSD)一点实践
2015-12-23 23:32
435 查看
[转自] http://blog.chinaunix.net/uid-276853-id-366491.html
关于XML的验证一点实践
1)此方法是在XML文档中绑定对应的DTD文件来进行的
说明: XML文档中若根元素含有属性如下:
//dtd路径设置
xmlns="un:hpedi_ex_mnl">//属性名为xmlns
…..
则在DTD中要增加设置为:
//这是某根元素含列表
//这个才是根元素属性设置
2)另外方法是:采用DOM4J来做,就不需要在具体XML文件中绑定XSD模式文件了。(推荐)
先当然是要添加Dom4j.jar包到项目路径中,再在具体java文件中import相关类
其中XSD验证部分代码如下:
XMLErrorHandler errorHandler = new XMLErrorHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);// 注意要设置有效,否则后面验证无用
factory.setNamespaceAware(true);// XSD中有命名空间设置
SAXParser parser = factory.newSAXParser();
SAXReader xmlReader = new SAXReader();
Document documentObject = (Document) xmlReader.read(new File(filename));// filename是对应符合XSD模式的具体xml文件绝对路径名
String xsdpathfile = "e:\\schemaexample\\example.xsd";// xsdPathfile是绝对路径名
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:"
+ xsdpathfile);
SAXValidator validator = new SAXValidator(parser.getXMLReader());
validator.setErrorHandler(errorHandler);
validator.validate(documentObject);
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
if (errorHandler.getErrors().hasContent()) {
writer.write(errorHandler.getErrors());
return false;
} else {
System.out.println("validate success.");
return true;
}
当然还可以使用Jdom来做,如果熟悉的话。
参考文章:(http://www-128.ibm.com/developerworks/cn/xml/tips/x-tipvalschm/index.html)
关于XML的验证一点实践
1)此方法是在XML文档中绑定对应的DTD文件来进行的
//部分程序代码如下: //为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(true);//设置验证有效 MyHandler handler = new MyHandler();//处理验证的类,具体在下 DocumentBuilder db = dbf.newDocumentBuilder(); db.setErrorHandler(handler); Document doc = null; doc = db.parse(new File(filename));//要验证的XML文件放入验证 if (handler.errorMessage == null) { System.out.println("XML文件是有效的"); } else { System.out.println("XML文件不是有效的"); return false; } class MyHandler extends DefaultHandler { String errorMessage = null; public void error(SAXParseException e) throws SAXException { errorMessage = e.getMessage(); System.out.println("一般错误:" + errorMessage); } public void fatalError(SAXParseException e) throws SAXException { errorMessage = e.getMessage(); System.out.println("致命错误:" + errorMessage); } }
说明: XML文档中若根元素含有属性如下:
//dtd路径设置
xmlns="un:hpedi_ex_mnl">//属性名为xmlns
…..
则在DTD中要增加设置为:
//这是某根元素含列表
//这个才是根元素属性设置
2)另外方法是:采用DOM4J来做,就不需要在具体XML文件中绑定XSD模式文件了。(推荐)
先当然是要添加Dom4j.jar包到项目路径中,再在具体java文件中import相关类
其中XSD验证部分代码如下:
XMLErrorHandler errorHandler = new XMLErrorHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);// 注意要设置有效,否则后面验证无用
factory.setNamespaceAware(true);// XSD中有命名空间设置
SAXParser parser = factory.newSAXParser();
SAXReader xmlReader = new SAXReader();
Document documentObject = (Document) xmlReader.read(new File(filename));// filename是对应符合XSD模式的具体xml文件绝对路径名
String xsdpathfile = "e:\\schemaexample\\example.xsd";// xsdPathfile是绝对路径名
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:"
+ xsdpathfile);
SAXValidator validator = new SAXValidator(parser.getXMLReader());
validator.setErrorHandler(errorHandler);
validator.validate(documentObject);
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
if (errorHandler.getErrors().hasContent()) {
writer.write(errorHandler.getErrors());
return false;
} else {
System.out.println("validate success.");
return true;
}
当然还可以使用Jdom来做,如果熟悉的话。
参考文章:(http://www-128.ibm.com/developerworks/cn/xml/tips/x-tipvalschm/index.html)
相关文章推荐
- Linux 命令学习!haha
- 二级菜单ExpandPopView的使用和实现
- ./configure,make,make install的作用
- android sqlite讲解(一)
- 牛人的linux学习四部曲
- 严蔚敏数据结构顺序表的所有基本操作
- 集合Map
- 欢迎使用CSDN-markdown编辑器
- 防Ddos文献之敌情篇-DDoS攻击原理
- 求字符串最长连续不重复的字串
- 预算oracle
- linux学习书籍和路线推荐
- Android 2D 绘图
- scala语法 基础3
- iOS图文混排的简易实现
- 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】(转)
- Android中SQLite应用详解
- sharedPrefereces
- Tableview 默认选中第一行以及选中背景自定义
- Eclipse使用技巧