• 我做的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

  • 相关阅读:
    iphone合并.a文件,制作通用静态库
    iphone技巧3
    在windows下安装collabnet subversion server 1.6.5 正确
    iphone技巧2
    iPhone开源库
    盗链,可耻啊
    Jquery ajax 缓存
    js调用服务器端按钮的事件
    电脑删除文件很慢怎么回事?
    解决'System.OutOfMemoryException' 的问题
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/315945.html
Copyright © 2020-2023  润新知