这个schema并没有验证xml的语法(50分)

  • 主题发起人 主题发起人 henry3
  • 开始时间 开始时间
H

henry3

Unregistered / Unconfirmed
GUEST, unregistred user!
我故意弄错了一些数据类型,根本不报错。
<?xml version="1.0" encoding="GB2312" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<AttributeType name="公司"/>
<ElementType name= "姓名"/>
<ElementType name= "ID" dt:type="boolean"/>
<ElementType name= "公司"/>
<ElementType name= "EMAIL"/>
<ElementType name= "电话" dt:type="fixed.14.4"/>
<ElementType name= "街道"/>
<ElementType name= "城市"/>
<ElementType name= "省份"/>
<ElementType name= "地址" content="eltOnly">
<element type= "街道" />
<element type= "省份" />
<element type= "城市" />
</ElementType>
<ElementType name= "联系人" content="eltOnly">
<element type= "姓名" />
<element type= "ID" />
<element type= "公司" />
<element type= "EMAIL" />
<element type= "电话" />
<element type= "地址" />
</ElementType>
<ElementType name= "联系人列表" content="eltOnly">
<element type= "联系人" />
<attribute type="公司"/>
</ElementType>
</Schema>
<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<联系人列表 xmlns="x-schema:firm.xml">
<联系人>
<姓名>张三</姓名>
<ID>001abc</ID>
<公司>A公司</公司>
<EMAIL>zhang@aaa.com</EMAIL>
<电话>(010)62345678a</电话>
<地址>
<街道>五街1234号</街道>
<城市>北京市</城市>
<省份>北京</省份>
<ZIP>100001</ZIP>
</地址>
</联系人>
</联系人列表>
 
我也想知道在DELPHI中怎么通过Schema来校验XML文件的有效性。
 
vb 例子
在客户机/服务器环境中验证XML
在C/S(客户机/服务器)环境中,客户机和服务器都可以使用Schema来验证文档。在客户机端验证的对象可以是从服务器发来的文档,也可以是即将发送出去的文档。下面的这个例子就是用一个名为CustomerSchema.xml的Schema来验证docSubmit的xml文档,然后发送给服务器:
Set rootnode =do
cSubmit.documentElement
rootnode.setAttribute “xmlns”,
“x-schema:http://server/CustomerSchema.xml”
DOM首先取得根元素的访问权,然后把xmlns设为Schema的地址,使之开始验证。
相对客户机而言,在服务器上进行验证的意义更重大,在实际中也更为常见。由于连接到服务器上的客户数非常多,所以有必要在处理它们发送来的数据前,检查收到的文档是否与预期的结构一致。验证步骤如下:
1.将XML文档载入DOM树,开始验证:
Setdo
cReceived = CreateObject(“Microsoft.XMLDOM”)
docReceived.validateOnParse = True
docReceived.async = False
docReceived.load Request
2.判断是否链接XML Schema(只需检验一下根元素中是否设置了xmlns属性):
Set rootnode =do
cReceived.documentElement
If rootnode.getAttribute(“xmlns”) =
“x-schema:http://sever/CustomerSchema.xml”
then

〈!--有,开始验证!--〉
else

〈!--没有…… --〉
End If
3.如果没有链接,服务器就要指定一个Schema进行链接,然后将更新的文档重新装入到另一个DOM树中:
path = Server.mapPath(“CustomerSchema.xml”)
attr = “x-schema:” &amp;
path
rootnode.setAttribute “xmlns”, attr
Setdo
cTested = CreateObject(“Microsoft.XMLDOM”)
docTested.validateOnParse = True
docTested.async = False
docTested.loadXMLdo
cReceived.xml
由于XML Schema具有许多优秀的特性,国际上许多著名公司和大企业纷纷开始向Schema倾斜,比如微软的IE 5.0就已经支持XML Schema。虽然Schema还需要在不断的实践中逐步完善,但XML Schema取代DTD已经是大势所趋,因此,笔者建议应学习并掌握这一技术。
 
用MSXML4。0的SDK例子来验证
 
后退
顶部