[转自] 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. logistic growth model . 求解方法 (高斯牛顿法)

    https://www.stat.tamu.edu/~jnewton/604/chap4.pdf http://www.metla.fi/silvafennica/full/sf33/sf334327 ...

  2. CF 961G Partitions

    推不动式子 我们考虑每一个$w_i$对答案的贡献,因为题目中定义集合的价值为$W(S) = \left | S \right |\sum_{x \in S}w_x$,这个系数$\left | S \r ...

  3. lnmp+laravel部署到服务器出现 "GET / HTTP/1.1" 500 5

    lnmp一键安装包直接下载安装,就可以了,在此不多说. 虚拟机配置给个参考(lnmp安装包) server { listen 80; #listen [::]:80; server_name www. ...

  4. SQL 左联接去除左边重复的数据

    代码如下: use DB go select table1.*,b.OPTime from [dbo].[table1] left join( select * from (select table2 ...

  5. 【linux命令】setterm控制终端属性命令(中英文)

    [linux命令]setterm控制终端属性命令(中英文) 2018年03月23日 17:13:44 阅读数:489 标签: linux 更多 个人分类: linux 摘自:https://blog. ...

  6. Part5核心初始化_lesson3---关闭看门狗

    1.看门狗---作用 2.看门狗工作方式 3.原理图 时钟源来自于PCLK经过分频器,经过选择器,输出到作为看门狗定时器,WTDAT为一个预载值,当它计数为零的时候,还没有给WTDAT赋值,那么它会发 ...

  7. 奇妙的 Storage::url

    发现 这是我在做头像上传功能时发现的,下面是图片上传的业务逻辑. class AvatarController extends Controller { public function update( ...

  8. Java 数据结构之数组

    public class Arrays {    //创建一个Integer空数组    public static Integer[] player=null;    //添加球员号码    pri ...

  9. MongoDB整理笔记のReplica oplog

    主从操作日志oplog MongoDB的Replica Set架构是通过一个日志来存储写操作的,这个日志就叫做"oplog".oplog.rs是一个固定长度的capped coll ...

  10. CentOS下配置防火墙 配置nat转发服务

    CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/sysconfig/network   这里可以更改主机 ...