拥有正确语法的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. 第二遍回顾--①前端flex布局

    1.flex: 弯曲,收缩 2.概念 2条主轴,main axis,cross axis; 每个单元为flex item,主轴空间main size,交叉轴空间cross size; 3.容器 .co ...

  2. 有关Canvas的一点小事—canvas数据和像素点

    1.  canvas生成base64数据 canvas.toDataURL()生成的数据可以直接给image对象使用作为<img>显示在前端,也可以传给后台生成图片保存.前端生成保存图片的 ...

  3. Photon + Unity3D 线上游戏开发 学习笔记(三)

    好的,说了两篇了 如今我们正式的入手,揭开photon 的盖头哈  建立photon项目 第一步:   在Visual studio建立一个空的 待会为了測试也会在里面建立一个client 项目 (只 ...

  4. 【JAVASE】Java同一时候抛出多个异常

    Java有异常抛出后.跳出程序.一般无法运行接下来的代码. 大家做登陆功能.常常会实username和password的登陆校验,username或者password错误.假设通常是提示usernam ...

  5. 代码高亮显示——google-code-prettify

    先放着,搭建完HEXO博客再来写这篇. https://code.google.com/archive/p/google-code-prettify/

  6. ab压测返回结果解析

    Server Software:        Apache/2.2.25 (服务器软件名称及版本信息)Server Hostname:        localhost (服务器主机名)Server ...

  7. 9.6 Binder系统_驱动情景分析_server的多线程实现

    当多个client对server发出请求的时候,如果server忙不过来的时候会创建多线程来处理请求 那么忙不过来由谁来判断? server进程有个binder_proc结构体,其里面有todo链表( ...

  8. MySQL的安装及使用教程

    MySQL的安装及使用教程 一.  MySQL的下载及安装 首先登陆MySQL的官网,选择Downloads→Windows→MySQL Installer→Windows(x86,32-bit),M ...

  9. [RxJS] ReplaySubject with buffer

    A BehaviorSubject can remember the latest value emitted, but what if we wanted Observer B to see all ...

  10. 为什么一款优秀的移动工具类应用必须开发PCclient?

    移动大潮气势汹汹,PC端似乎已经一条腿跨进了坟墓. 作为一个windows开发者.难免有些焦灼. windows真的已死吗?真的无用武之地了吗? 或许是人云亦云吧. 突然看到了这篇文章,感触颇深. 文 ...