我做的XML验证的测试记录

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

你可能感兴趣的:(xml)