[转自] 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来做,如果熟悉的话。

关于XML的验证(DTD与XSD)一点实践的更多相关文章

  1. Delphi 7验证XML合法性(利用DTD、XSD)

    拥有正确语法的XML被称为“形式良好”的XML.通过DTD验证的XML是“合法”的XML.DTD(文档类型定义)的作用是定义XML 文档的合法构建模块.它使用一系列的合法元素来定义文档结构.XML S ...

  2. XML、XSL、XSLT、DTD、XSD的区别

    前言: 在众神的努力之下,js已经可以跨出浏览器走向不同的领域了 也因为这个,对前端工程师的要求也不仅仅是会写写h5页面做交互.前端涉及的领域越来越广,对开发人员对素质能力要求越高. 以前因设备不同导 ...

  3. XHtml(Xml+Html)语法知识(DTD、XSD)

    那点你不知道的XHtml(Xml+Html)语法知识(DTD.XSD) 什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ ...

  4. Eclipse xml中自动提示,添加 dtd或xsd依赖

    下载DTD或XSD文件 添加到Eclipse

  5. Eclipse关闭XML文件验证的方法

    XML的编写是否符合规范,可以通过XML Schema或DTD进行验证,但有时候电脑本来就很卡,而且XML的某些错误并未导致程序无法运行的情况下,暂时关闭XML的验证也算不错的选择. 如web.xml ...

  6. XML的验证模式

    XML文件的验证模式保证了XML文件的正确性,而比较常用的验证模式有两种:DTD和XSD. DTD与XSD区别 DTD(Document Type Definition)即文档类型定义,是一种XML约 ...

  7. XML Schema验证

    XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模 ...

  8. DTD与XSD的区别

    DTD=类型定义(Documnet Type Definition) XSD=XML结构定义 ( XML Schemas Definition ) DTD 就相当于 XML 中的“词汇”和“语法”,不 ...

  9. Eclipse关闭XML文件验证的方法,解决xml警告

    XML的编写是否符合规范,可以通过XML Schema或DTD进行验证,但有时候电脑本来就很卡,而且XML的某些错误并未导致程序无法运行的情况下,暂时关闭XML的验证也算不错的选择. 如web.xml ...

随机推荐

  1. 过渡函数transition-timing-function

  2. Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications

    January 2014 Containing twenty-four design patterns and ten related guidance topics, this guide arti ...

  3. (转)15个非常棒的jQuery无限滚动插件【瀑布流效果】

    原文地址:http://www.cnblogs.com/lyw0301/archive/2013/06/19/3145084.html 现在,最热门的网站分页趋势之一是jQuery的无限滚动(也即瀑布 ...

  4. 编写高质量代码改善C#程序的157个建议——建议59:不要在不恰当的场合下引发异常

    建议59:不要在不恰当的场合下引发异常 常见的不易于引发异常的情况是对在可控范围内的输入和输出引发异常. private void SaveUser3(User user) { ) { throw n ...

  5. Spring MVC:Model、View、ModelAndView

    个人理解:View为服务器上的某个文件容器,可以为JSP,FTL等动态页面文件,甚至是媒体文件等等,单单是一个文件.Model的作用是存储动态页面属性,动态页面文件即View可以在Model中获取动态 ...

  6. c++迭代递归实现汉诺塔(5种迭代方法满足你)

    #include <iostream> //从A到C using namespace std; int n; void ready() { cout << "请输入汉 ...

  7. ubuntu14.10,解决按照最新版Gnome 15.10后,经典Gnome桌面字体问题!

    ubuntu14.10刚安装完毕,我首先按照了经典Gnome桌面,随后我发现ubuntu软件中心里面能找到的软件明显不如先前我安装过的ubuntu了,我觉得有可能是因为我以前安装的ubuntu14.1 ...

  8. 【ARC083E】Bichrome Tree 树形dp

    Description 有一颗N个节点的树,其中1号节点是整棵树的根节点,而对于第ii个点(2≤i≤N)(2≤i≤N),其父节点为PiPi 对于这棵树上每一个节点Snuke将会钦定一种颜色(黑或白), ...

  9. 【bzoj2437】[Noi2011]兔兔与蛋蛋 二分图最大匹配+博弈论

    Description Input 输入的第一行包含两个正整数 n.m. 接下来 n行描述初始棋盘.其中第i 行包含 m个字符,每个字符都是大写英文字母"X".大写英文字母&quo ...

  10. 基于SSH协议clone GitHub远端仓库到本地-git

    经常逛 GitHub 的可能都知道,在 clone 远端仓库的时候,会有两个选项,如下图: 首先我们来说明一下两种方式的区别. 使用 HTTPS url 克隆对初学者来说会比较方便,复制HTTPS u ...