您的位置:首页 > 其它

我做的XML验证的测试记录

2006-01-12 14:04 309 查看
1、XML文件
1 <?xml version="1.0" encoding="utf-8" ?>
2 <图书流通信息
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns="http://tempuri.org/demo1.xsd"
5 xsi:schemaLocation="http://tempuri.org/demo1.xsd demo1.xsd"
6 Maker="1" attribute1="dd">
7 <传送标题>test</传送标题>
8 </图书流通信息>说明:
第一行声明XML版本,字符集
第二行文档元素或根元素 起始
第三行使用xmlns定义名称空间"http://www.w3.org/2001/XMLSchema-instance",及使用别名xsi
第三行使用xmlns定义名称空间"http://tempuri.org/demo1.xsd",注:因没有指定别名,故为缺省名称空间。
第四行使用xsi:schemaLocation定义名称空间"http://tempuri.org/demo1.xsd"的XML Schema(XSD)为XML文件缺省目录下的demo1.xsd文件。
另:如果使用XDR时这里的定义为:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <图书流通信息
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns="x-schema:demo1.xdr" >
5 <传送标题>test</传送标题>dd
6 </图书流通信息>
第五行定义根元素的两个属性。
略。

2、XML Schema文件(使用VS可视化定义的,不解释了)

1 <?xml version="1.0" encoding="utf-8" ?>
2 <xs:schema id="demo1" targetNamespace="http://tempuri.org/demo1.xsd" elementFormDefault="qualified"
3 xmlns="http://tempuri.org/demo1.xsd" xmlns:mstns="http://tempuri.org/demo1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
4 <xs:element name="图书流通信息">
5 <xs:complexType>
6 <xs:sequence>
7 <xs:element name="传送标题" type="xs:string" minOccurs="1" maxOccurs="1" />
8 </xs:sequence>
9 <xs:attribute name="Maker" type="xs:int" use="required" />
10 <xs:attribute name="attribute1" type="xs:string" use="required" />
11 </xs:complexType>
12 </xs:element>
13 </xs:schema>
3、验证(测试使用的是WebServices)

1 [WebMethod]
2 public string doDemo1Validating()
3 {
4
5 ErrorMessage="OK";
6 //表示提供对 XML 数据进行快速、非缓存、只进访问的读取器。
7 XmlTextReader xtr = new XmlTextReader("C:\\Inetpub\\wwwroot\\WebService1\\demo1.xml");
8 //表示提供 DTD、XML 数据简化 (XDR) 架构和 XML 架构定义语言 (XSD) 架构验证的读取器。
9 XmlValidatingReader xvr = new XmlValidatingReader(xtr);
10
11 //获取一个值,该值描述要执行哪种类型的验证。
12 xvr.ValidationType = ValidationType.Schema;
13 //设置事件处理程序以接收有关 DTD、XML 数据简化 (XDR) 架构和 XML 架构定义语言 (XSD) 架构验证错误的信息。
14 xvr.ValidationEventHandler+=new ValidationEventHandler(xvr_ValidationEventHandler);//按两下TAB可以自动生成委托代码
15
16 //从流中如果成功读取了下一个节点,则为 true;如果没有其他节点可读取,则为 false。
17 while (xvr.Read())
18 {
19 if (xvr.SchemaType!=null)
20 {
21 //简单类型
22 if (xvr.SchemaType is XmlSchemaDatatype || xvr.SchemaType is XmlSchemaSimpleType)
23 {
24 Object value = xvr.ReadTypedValue();
25 //结点类型xvr.NodeType
26 //结点限定名称xvr.Name
27 //xsd定义的类型value.GetType
28 }
29 //复杂类型
30 else if (xvr.SchemaType is XmlSchemaComplexType)
31 {
32 XmlSchemaComplexType sct = (XmlSchemaComplexType)xvr.SchemaType;
33 //结点类型xvr.NodeType
34 //结点限定名称xvr.Name
35 //xsd定义的类型value.GetType
36 }
37
38 //如果结点是元素
39 if (xvr.NodeType == XmlNodeType.Element)
40 {
41 while(xvr.MoveToNextAttribute())//逐个取出当前元素下的属性
42 {
43 //同上一个IF
44 }
45 }
46 }
47 }
48 xvr.Close();
49 xtr.Close();
50 return ErrorMessage;
51
52 }
53
54 private void xvr_ValidationEventHandler(object sender, ValidationEventArgs e)
55 {
56 //验证错误
57 //显示错误信息 e.Message();
58 ErrorMessage = e.Message;
59 }
说明:
验证类型(ValidationType)分四种:Auto\DTD\Schema\XDR\None

Schema=XSD,它与XDR有什么区别?我不明白。
DELPH的工具XmlMapper可以将XML文件装入后生成DTD\XDR\XSD
好像XDR是Microsoft的东西
XDR=XML Data Reduced
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: