博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA中使用Schema校验XML
阅读量:2437 次
发布时间:2019-05-10

本文共 7046 字,大约阅读时间需要 23 分钟。

转自 http://blog.csdn.net/fenglibing/archive/2009/05/05/4150642.aspx

 

源程序来源于网络,感谢程序的原作者。源程序比较不容易看懂,如没有引用相关的包,没有说明相关包如何获取,相关的理论依据是什么,这里我补充完整。完整源程序如下:

  1. /* 1、需要四个JAR包的支持:isorelax、dom4j、relaxngDatatype、xsdlib,都可以在sourceforge上面下载,如果不知道如何查找,  
  2.  * 参看:http://blog.csdn.net/fenglibing/archive/2009/05/04/4149558.aspx  
  3.  * 2、该程序实现的理论支论,参见文章:http://blog.csdn.net/fenglibing/archive/2009/05/05/4150510.aspx  
  4.  * 3、如果想错误提示使用中文,可以使用Locale.setDefault(Locale.CHINA)来设置默认的Locale,同时在这个类的同一个包中增加Message_zh_CN.properties文件,   
  5.  * 这个文件将中文变成unicode. 可以使用jdk下的工具native2ascii来实现.native2ascii的使用介绍,参见如下文章:  
  6.  * http://blog.csdn.net/fenglibing/archive/2009/05/04/4149680.aspx  
  7.  */   
  8. import  java.io.InputStream;  
  9.   
  10. import  org.iso_relax.verifier.Schema;  
  11. import  org.iso_relax.verifier.Verifier;  
  12. import  org.iso_relax.verifier.VerifierFactory;  
  13. import  org.iso_relax.verifier.VerifierFilter;  
  14.   
  15. import  org.dom4j.Document;  
  16. import  org.dom4j.DocumentException;  
  17. import  org.dom4j.io.SAXReader;  
  18. import  org.xml.sax.ErrorHandler;  
  19. import  org.xml.sax.SAXParseException;  
  20.   
  21. public   class  SchemaValidation {  
  22.   
  23.     public   static   void  main(String[] args) {  
  24.         validate();  
  25.     }  
  26.   
  27.     public   static   void  validate() {  
  28.         try  {  
  29.             SchemaValidation demo = new  SchemaValidation();  
  30.             // Give the xml and schema name   
  31.             InputStream xmlString = demo.getClass().getResourceAsStream(  
  32.                     "GBAInit.xml" );  
  33.             InputStream schemaStr = demo.getClass().getResourceAsStream(  
  34.                     "GBAInitSchema.xsd" );  
  35.             SAXReader reader = createSAXReader(schemaStr);  
  36.             System.out.println("XSD parse successfully !" );  
  37.   
  38.             Document document = reader.read(xmlString);  
  39.             System.out.println("Successfully validation .. . " );  
  40.         } catch  (DocumentException e) {  
  41.             System.out.println("Exception occurred: "  + e);  
  42.             Throwable nestedException = e.getNestedException();  
  43.             if  (nestedException !=  null ) {  
  44.                 System.out.println("NestedException: "  + nestedException);  
  45.                 nestedException.printStackTrace();  
  46.             } else  {  
  47.                 e.printStackTrace();  
  48.             }  
  49.         } catch  (Throwable t) {  
  50.             System.out.println("Exception occurred: "  + t);  
  51.             t.printStackTrace();  
  52.         }  
  53.     }  
  54.   
  55.     /** Registers the Verifier with the SAXReader */   
  56.     protected   static  SAXReader createSAXReader(InputStream schemaURI)  
  57.             throws  Exception {  
  58.   
  59.         System.out.println("Loaded schema document: "  + schemaURI);  
  60.         //四步必须,一步可选:创建校验工厂、编码Schema、生成校验器、[设置错误处理]、XML文档校验   
  61.         //第一步:创建校验工厂,可选择不同的校验工厂   
  62.         // use autodetection of schemas   
  63.         //查看JARV的详细信息:http://iso-relax.sourceforge.net/JARV/,进入其userGuide   
  64.         //该步为创建校验工厂实例,如果需要换成其它的校验器,将com.sun.msv.verifier.jarv.TheFactoryImpl()换成其它即可,如使用 Swift RELAX Verifier:   
  65.         //VerifierFactory factory = new jp.xml.gr.relax.swift.SwiftVerifierFactory();   
  66.         VerifierFactory factory = new  com.sun.msv.verifier.jarv.TheFactoryImpl();  
  67.         //第二步:编译成Schema,支持源为URL、InputStream、File、InputSource等   
  68.         Schema schema = factory.compileSchema(schemaURI);  
  69.         //第三步:生成校验器   
  70.         Verifier verifier = schema.newVerifier();  
  71.         //第四步:设置自己的错误处理,如果不设置就是默认的错误处理   
  72.         verifier.setErrorHandler(new  ErrorHandler() {  
  73.             public   void  error(SAXParseException e) {  
  74.                 System.out.println("ERROR: "  + e);  
  75.             }  
  76.             public   void  fatalError(SAXParseException e) {  
  77.                 System.out.println("FATAL: "  + e);  
  78.             }  
  79.             public   void  warning(SAXParseException e) {  
  80.                 System.out.println("WARNING: "  + e);  
  81.             }  
  82.         });  
  83.         //第五步:XML文档校验   
  84.         VerifierFilter filter = verifier.getVerifierFilter();  
  85.         //默认SAXReader的校验是关闭的,采用setXMLFilter方法,就显示设置了过滤器,后面生成的对象就会做校验   
  86.         SAXReader reader = new  SAXReader();  
  87.         reader.setXMLFilter(filter);  
  88.         return  reader;  
  89.     }  
<script type="text/javascript"> var CurrentEntryId = '4150642'; </script> <script src="http://hi.images.csdn.net/js/blog/feedback.js?v=2009060916" type="text/javascript"></script>
jeff2033333 发表于2009年5月5日 12:25:18  
IP:
巧 了,我也是这两天被那个源程序搞得比较头大,补充几点吧:1. sourceforge上已经没有这些包了,我查不到,即使确实还有也至少说明,这个project已经不再是sourceforge费心维护的对象,版 本问题成疑。2. findjar网站上的jar包虽然多但也很杂,仍旧是版本问题无从保障。我从各方凑来这些jar包好几套,全都是缺胳膊少腿的。3. 稳定可用的包应该去sun的站点去下载,因为MVS这个东西本来就是sun的项目。sun在zip包里提供了好几个相关jar包,比如 xcercesImpl等,可能跟你原有的库冲突,个人意见,最好用它提供的,因为人家依赖包之间的兼容性肯定能保障,下载地 址:https://msv.dev.java.net/servlets/ProjectDocumentList?folderID=100
你可能感兴趣的文章
足球战术->边锋之Decorator篇 (转)
查看>>
详析VC中坐标系的建立 (转)
查看>>
怎样用程序取得CPU信息 (转)
查看>>
编写优质无错代码(1) (转)
查看>>
编写优质无错代码(2) (转)
查看>>
在VC中调用WORD(显示,修改,存盘,运行宏)之二去掉word的常用,格式工具栏 (转)...
查看>>
ASP设计常见问题及解答精要(1) tigerwen01(转贴) (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.3 用于 SELECT 和 WHERE 子句的函数 (1) (转)
查看>>
坐标曲线的编程实现 (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.2 列类型 (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.6 基本的 MySQL 用户实用命令 (转)
查看>>
利用weblogic的POOL(连接池)连接数据库 (转)
查看>>
vs.net beta 2中利用DataGrid分页详解 (转)
查看>>
WebLogic的初步研究(2)--结构篇 (转)
查看>>
Process-Display-Process (PDP) pattern (转)
查看>>
基于构件复用的软件方法与COM支持 (转)
查看>>
DELPHI中使用API函数详解 (转)
查看>>
Single Entry Point to EJB Layer (转)
查看>>
InsideJVM(3)--Method area(方法区) (转)
查看>>