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

前端外刊评论 2018-02-21

拥有正确语法的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",如下图所示:
Delphi 7验证XML合法性(利用DTD、XSD)
在这里为简单测试,只做一个很简单的模型,假如我们要为一个XML测试元素的内容是否是规定的整型时,即要测试的XML如下:

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

新建test.xml文件,粘贴上面内容,保存文件为"UTF-8"编码。测试目的是要能检测出<number>元素内容不是规定的整型。在PowerDesigner中,拖动"Palette"面板上的"Element"图标到模型图上,双击设置其"name"为"number","type"为"xs:integer",如下图所示:
Delphi 7验证XML合法性(利用DTD、XSD)
右侧"Preview"页面可以预览XSD文本内容。在菜单"Language"→"Generate XML Schema Definition File",选择保存的路径"Directory",按"确定"生成XSD文件,打开生成的"XMLModel_test.xsd"文件,如下内容:

1
2
3
4
5
6
<?xmlversion="1.0"encoding="UTF-8"?>
<xs:schema
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:elementname="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",如下图所示:

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

验证示例代码如下:

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
usesMSXML2_TLB;

procedureTForm1.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;
ifError.errorCode<>S_OKthen
mmo1.Lines.Add(Error.reason)
else
mmo1.Lines.Add('验证成功');
end;

注意这是使用"msxml6"版本的,也打包进源码下载地址里面。在上面代码的基础上,一个GUI程序如下所示:
Delphi 7验证XML合法性(利用DTD、XSD)
下载地址:http://dl.dbank.com/c02yqtgh32http://download.csdn.net/detail/akof1314/3674176

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

相关推荐