[转自] http://blog.chinaunix.net/uid-276853-id-366491.html
关于XML的验证一点实践
//部分程序代码如下: //为解析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来做,如果熟悉的话。
原文链接:https://www.f2er.com/xml/295721.html