拥有正确语法的XML被称为“形式良好”的XML。通过DTD验证的XML是“合法”的XML。DTD(文档类型定义)的作用是定义XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。XML Schema是基于XML的DTD替代者。XML Schema描述XML文档的结构。XML Schema语言也称作XML Schema定义(XML Schema Definition,XSD)。
        PowerDesigner是Sybase公司的CASE工具集,也可以用来设计XML模型。在这里我使用PowerDesigner来设计XSD,使用版本15.3.0.3248。菜单"File"→"New Model"→"Model types"→"XML Model"→"XML Model Diagram",在下面的"Model Name"输入模型名称,"XML Language"选择"XML Schema Definition 1.0",如下图所示:
       
        在这里为简单测试,只做一个很简单的模型,假如我们要为一个XML测试元素的内容是否是规定的整型时,即要测试的XML如下:

1
2
  <?xml version="1.0" encoding="utf-8"?> 
<number>abcd</number> 

新建test.xml文件,粘贴上面内容,保存文件为"UTF-8"编码。测试目的是要能检测出<number>元素内容不是规定的整型。在PowerDesigner中,拖动"Palette"面板上的"Element"图标到模型图上,双击设置其"name"为"number","type"为"xs:integer",如下图所示:

        右侧"Preview"页面可以预览XSD文本内容。在菜单"Language"→"Generate XML Schema Definition File",选择保存的路径"Directory",按"确定"生成XSD文件,打开生成的"XMLModel_test.xsd"文件,如下内容:

1
2
3
4
5
6
  <?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema  
   elementFormDefault="qualified" 
   xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
   <xs:element name="number" type="xs:integer"/> 
</xs:schema> 

在Delphi 7中要验证XML的合法性,需要引用"MSXML2_TLB"单元,这个是通过菜单"Project"→"Import Type Library"→"Microsoft XML,v6.0(Version 6.0)",也就是"C:\WINDOWS\system32\msxml6.dll",然后点击"Create Unit",就生成了"MSXML2_TLB.pas",如下图所示:

验证示例代码如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  uses MSXML2_TLB; 
 
procedure TForm1.btn_ValClick(Sender: TObject); 
var 
  SchemaDoc, XmlDoc: IXMLDOMDocument2; 
  SchemaCache: IXMLDOMSchemaCollection; 
  Error: IXMLDOMParseError; 
begin 
  //---------------加载数据------------------------ 
  XmlDoc := CoDOMDocument60.Create; 
  XmlDoc.async := False; 
  XmlDoc.load('E:\练习\test.xml'); 
 
  //---------------加载schema架构文档------------------------ 
  SchemaDoc := CoDOMDocument60.Create; 
  SchemaDoc.async := False; 
  SchemaDoc.load('E:\练习\test\XMLModel_test.xsd'); 
 
  //---------------注册架构缓存------------------------ 
  SchemaCache := CoXMLSchemaCache60.Create; 
  SchemaCache.add('', schemadoc); 
 
  //---------------分配架构缓存到XML文档------------------------ 
  XmlDoc.schemas := schemacache; 
 
  //---------------验证和报告------------------------ 
  Error := xmldoc.validate; 
  if Error.errorCode <> S_OK then 
   mmo1.Lines.Add(Error.reason) 
  else 
   mmo1.Lines.Add('验证成功'); 
end; 

注意这是使用"msxml6"版本的,也打包进源码下载地址里面。在上面代码的基础上,一个GUI程序如下所示:

下载地址:http://dl.dbank.com/c02yqtgh32   http://download.csdn.net/detail/akof1314/3674176

http://blog.csdn.net/akof1314/article/details/6860264

Delphi 7验证XML合法性(利用DTD、XSD)的更多相关文章

  1. 28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html XML Schema 语言也称作 XML Schema 定义(XML S ...

  2. C# 利用Xsd验证xml

    最近做项目时,用到了xml的序列化与反序列化, 发现最好用xsd来验证xml, 因为反序列化xml不校验xsd. 方法:xmlData变量为xml字符串 MemoryStream ms = new M ...

  3. 使用架构(XSD)验证XML文件

    假使说XML是一个数据库,那么XSD就是这个数据库的结构.由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,如果你将XML数据 ...

  4. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  5. 关于xml的一些知识,DTD,XSD

    DTD 文档类型定义(Document Type Definition)是一套关于标记符的语法规则.它是标准通用标记语言和 可扩展标记语言1.0版规格的一部分,是文档的验证机制.文档类型定义是一种保证 ...

  6. XML中DTD,XSD的区别与应用

    XML我们并不陌生,在企业级应用中有很广的用途.具体就不再说,下面介绍一下DTD,XSD的区别并以XSD为例看spring中定义与使用.1.DTD(Documnet Type Definition)D ...

  7. C# 使用xsd文件验证XML 格式是否正确

    C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...

  8. DTD验证XML文档

    DTD验证XML文档        1.DTD简介:DTD是Document Type Definition的缩写,即文档定义            1.1:DTD的内容包含:             ...

  9. C# xsd 验证 XML数据有效性 问题

    使用XSD进行批量数据导入时生成的XML数据有效性这样的功能已经不是第一次做了,之前做的时候都没有碰到什么问题,这些天在开发中遇到了一个很头痛的问题就是无论XSD文件规则怎么写,验证都是通过的. 下面 ...

随机推荐

  1. golang sort

    package main import ( "fmt" "strings" "sort" ) type Animals []string f ...

  2. Python 极简教程(六)运算符

    运算符,我们日常生活中使用的加减乘除,都是运算符的一种.当然这种一般我们称为算术运算符,用于处理数字运算的. 但是在计算机语言中,还有很多的运算符.用于处理不用的情况. 主要有以下几类: 算术运算符 ...

  3. Hbase技术详细学习笔记

    注:转自 Hbase技术详细学习笔记 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hbase的理解,对相关知识点做了笔记,并在组内进行 ...

  4. java中volatile关键字的含义--volatile并不能做到线程安全

    在Java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  5. Day2:字典

    一.定义 字典是一种“key-value”成对出现的数据类型,中间用冒号把key与value隔,不同的数据用逗号隔开,全部数据用大括号括起来 info = { 'stu1101': "Ten ...

  6. QWaitCondition 的正确使用方法(通过 mutex 把有严格时序要求的代码保护起来,同时把 wakeAll() 也用同一个 mutex 保护起来)

    简单用法 QWaitCondition 用于多线程的同步,一个线程调用QWaitCondition::wait() 阻塞等待,直到另一个线程调用QWaitCondition::wake() 唤醒才继续 ...

  7. 系统学习java高并发系列一

    转载请注明原创出处,谢谢! JAVA服务端或者后端需要大量的高并发计算,所以高并发在JAVA服务端或者后端编程中显的格外重要了. 首先需要有几个概念: 1.同步和异步 同步异步是来形容方法的一次调用的 ...

  8. php课程 8-29 gd库能够画哪些东西

    php课程 8-29 gd库能够画哪些东西 一.总结 一句话总结:文字,点,线,圆,弧线,矩形,各种形状都是可以的,和html5中的canva能画的东西很像,使用也很像,参数怎么记呢,参数完全不用记, ...

  9. stm32的APB1和APB2时钟

    要学会看官方例子,还要查找官方程序...

  10. FreeMarker分页组件监听器

    分页组件监听器 /*  * project名:    * 包     名: com.companyName.dhm.iepgm.common.taglib  * 文 件名: PaginatedList ...