关于XML的验证(DTD与XSD)一点实践
发布时间:2020-12-16 06:00:01 所属栏目:百科 来源:网络整理
导读:[转自] http://blog.chinaunix.net/uid-276853-id-366491.html 关于 XML 的验证一点实践 1)此方法是在 XML 文档中绑定对应的 DTD 文件来进行的 //部分程序代码如下://为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder DocumentBuilde
[转自] 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:schemaexampleexample.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)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |