• 关于XML的验证(DTD与XSD)一点实践


    [转自] http://blog.chinaunix.net/uid-276853-id-366491.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来做,如果熟悉的话。

  • 相关阅读:
    Java 文件操作大全
    JAVA 环境变量配置
    Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker)
    maven的安装,maven库配置和Eclipse插件的安装
    maven web项目不能创建src/main/java等文件夹的问题
    Java 高效检查一个数组中是否包含某个值
    java发送http的get、post请求
    Timequest静态时序分析(STA)基础
    QuartusII Design partion and logic lock
    FPGA优化之高扇出
  • 原文地址:https://www.cnblogs.com/pekkle/p/6568730.html
Copyright © 2020-2023  润新知