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

        拥有正确语法的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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值