拥有正确语法的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. 关于laravel框架分页报错的问题

    因为laravel框架有自己的分页封装,所以与其他框架相比laravel框架的分页的实现要方便的多 只要分别在php脚本与视图中使用 $data=DB::table('index_pic')-> ...

  2. 【Codeforces Round #299 (Div. 2) A】 Tavas and Nafas

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟题 [代码] #include <bits/stdc++.h> using namespace std; map & ...

  3. Seal Report开放数据库报表工具(.Net)

    Seal Report_20160923 概述:开放数据库报表工具(.Net) 简介:Seal-Report提供了一个完整的框架,用于从任何数据库生成日常报告和仪表板.Seal-Report是Micr ...

  4. C语言深度剖析-----C语言中的字符串

    S1字符数组 S2字符串,存在于栈空间 S3最常规的写字符串的方法,malloc是堆空间,存在于只读存储区,我们不能够改变指向S3的数据 S4堆空间  S4 字符串的长度 判断字符串长度,assert ...

  5. 每日技术总结:jquery datetimepicker,微博QQ好友QQ空间微信等分享接口

    前言: 1.jquery datetimepicker 今天遇到一个日期控件格式的问题,默认选中显示的并不是设定的值,而是当天的日期.于是去查了一遍文档. 参考文章:jquery datetimepi ...

  6. Springboot+shiro配置笔记+错误小结(转)

    软件152 尹以操 springboot不像springmvc,它没有xml配置文件,那该如何配置shiro呢,其实也不难,用java代码+注解来解决这个问题.仅以此篇记录我对shiro的学习,如有对 ...

  7. 35、在JZ2440上使用3G上网卡

    1. 简单使用:1.1 选型:中国联通:E网时空 EW65 (64元), ZTE中兴 MF637U (160多)中国电信:Benton/本腾 EQ10B (35元)中国移动:华为 ET128 (99元 ...

  8. hdu3377之简单路径求最值

    Plan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. matplotlib学习之颜色样式

    一.颜色 1.内建八种默认颜色 蓝色 - 'b' 绿色 - 'g' 红色 - 'r' 青色 - 'c' 品红 - 'm' 黄色 - 'y' 黑色 - 'k' 白色 - 'w' 2.灰度 plt.plo ...

  10. stackedit

    https://github.com/benweet/stackedit/ https://github.com/waltcow/blog/issues/4