Schema验证XML文件

Java代码   收藏代码
  1. package com.autelan.femto.acs.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileWriter;  
  6. import java.io.InputStream;  
  7.   
  8. import javax.xml.parsers.SAXParser;  
  9. import javax.xml.parsers.SAXParserFactory;  
  10.   
  11. import org.dom4j.Document;  
  12. import org.dom4j.io.OutputFormat;  
  13. import org.dom4j.io.SAXReader;  
  14. import org.dom4j.io.SAXValidator;  
  15. import org.dom4j.io.XMLWriter;  
  16. import org.dom4j.util.XMLErrorHandler;  
  17. import org.xml.sax.InputSource;  
  18.   
  19. public class TestSchema {  
  20.     public static void validateXMLByXSD(String xsdFileName, String xmlFileName) {  
  21.         try {  
  22.             // 创建默认的XML错误处理器  
  23.             XMLErrorHandler errorHandler = new XMLErrorHandler();  
  24.   
  25.             // 获取基于 SAX 的解析器的实例  
  26.             SAXParserFactory factory = SAXParserFactory.newInstance();  
  27.   
  28.             // 解析器在解析时验证 XML 内容。  
  29.             factory.setValidating(true);  
  30.   
  31.             // 指定由此代码生成的解析器将提供对 XML 名称空间的支持。  
  32.             factory.setNamespaceAware(true);  
  33.   
  34.             // 使用当前配置的工厂参数创建 SAXParser 的一个新实例。  
  35.             SAXParser parser = factory.newSAXParser();  
  36.   
  37.             // 创建一个读取工具  
  38.             SAXReader xmlReader = new SAXReader();  
  39.   
  40.             // 获取要校验xml文档实例  
  41.             Document xmlDocument = (Document) xmlReader.read(new File(  
  42.                     xmlFileName));  
  43.   
  44.             // 设置 XMLReader 的基础实现中的特定属性。  
  45.             parser.setProperty(  
  46.                     "http://java.sun.com/xml/jaxp/properties/schemaLanguage",  
  47.                     "http://www.w3.org/2001/XMLSchema");  
  48.             parser.setProperty(  
  49.                     "http://java.sun.com/xml/jaxp/properties/schemaSource",  
  50.                     "file:" + xsdFileName);  
  51.   
  52.             // 读取文件流的方式  
  53. //          InputStream input = new FileInputStream(new File(xsdFileName));  
  54. //          InputSource inputSource = new InputSource(input);  
  55. //          parser.getXMLReader().parse(inputSource);  
  56.   
  57.             // 创建一个SAXValidator校验工具,并设置校验工具的属性  
  58.             SAXValidator validator = new SAXValidator(parser.getXMLReader());  
  59.   
  60.             // 设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。  
  61.             validator.setErrorHandler(errorHandler);  
  62.   
  63.             // 校验  
  64.             validator.validate(xmlDocument);  
  65.             OutputFormat format = OutputFormat.createPrettyPrint();  
  66.             format.setEncoding("UTF-8");  
  67.             XMLWriter writer = new XMLWriter(new FileWriter(new File(  
  68.                     "d:\\err.xml")), format);  
  69.   
  70.             // TODO XMLWriter writer = new  
  71.             // XMLWriter(OutputFormat.createPrettyPrint());  
  72.             // 如果错误信息不为空,说明校验失败,打印错误信息  
  73.             if (errorHandler.getErrors().hasContent()) {  
  74.                 System.out.println("XML文件通过XSD文件校验失败!");  
  75.                 // ** 将document中的内容写入文件中 *//*  
  76.                 writer.write(errorHandler.getErrors()); // writer.write(parse(document));  
  77.                 writer.close();  
  78.             } else {  
  79.                 System.out.println("Good! XML文件通过XSD文件校验成功!");  
  80.             }  
  81.         } catch (Exception ex) {  
  82.             System.out.println("XML文件: " + xmlFileName + " 通过XSD文件:"  
  83.                     + xsdFileName + "检验失败。\n原因: " + ex.getMessage());  
  84.             ex.printStackTrace();  
  85.         }  
  86.     }  
  87.   
  88.     public static void main(String[] args) {  
  89.         String xsdFileName = "d:\\test.xsd";  
  90.         String xmlFileName = "d:\\test.xml";  
  91.         validateXMLByXSD(xsdFileName, xmlFileName);  
  92.     }  
  93.   
  94. }  


dom4j生成XML文件时遇到的无法通过addAttribute添加命名空间xmlns的问题: 

Java代码   收藏代码
  1. // 在创建节点时添加此空间即可生成  
  2. root = document.addElement("configDataFile","http://www.3gpp.org/ftp/specs/...");  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值