XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大。
作用有:
①定义可出现在文档中的元素
②定义可出现在文档中的属性
③定义哪个元素是子元素
④定义子元素的次序
⑤定义子元素的数目
⑥定义元素是否为空,或者是否可包含文本
⑦定义元素和属性的数据类型
⑧定义元素和属性的默认值以及固定值
XSD元素可分为简单元素和复杂元素。
一、简单元素
简易元素指仅包含文本的元素,它不会包含任何其他的元素或属性。
例如XML文档:
<Name>张三</Name>
用XSD可写为
<xs:element name="Name" type="xs:string"/>
此处“Name”是元素的名称,“xs:string”是XML Schema内建的数据类型。
最常用的类型有:xs:string、xs:decimal、xs:integer、xs:boolean、xs:date、xs:time等。
如果要指定元素的默认值或固定值,默认值用default定义,固定值用fixed定义。
<xs:element name="Name" type="xs:string" default="张三"/>
<xs:element name="Name" type="xs:string" fixed="张三"/>
也可限定元素的取值范围,例如限定字符串的长度为2至4,则可写为如下:
<xs:element name="Name">
     <xs:simpleType>
          <xs:restriction base="xs:string">
                <xs:minLength value="2" />
                 <xs:maxLength value="4" />
           </xs:restriction>
     </xs:simpleType>
</xs:element>
也可以写成:
<xs:element name="Name" type="tns:T_Name" />
<xs:simpleType name="T_Name">
    <xs:restriction base="xs:string">
      <xs:minLength value="2" />
      <xs:maxLength value="4" />
    </xs:restriction>
</xs:simpleType>
二、复合元素
复合元素包含了其他的元素及/或属性。
有四种类型的复合元素:
①空元素
②包含其他元素的元素
③仅包含文本的元素
④包含元素和文本的元素

一个XML代码:
<Person id="1">
     <Name>张三</Name>  
     <Age>120</Age>  
  </Person>  
在 XML Schema 中,可定义为:
<xs:element name="Person" maxOccurs="unbounded">
     <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string" />
              <xs:element name="Age" type="xs:string" />               
            </xs:sequence>
            <xs:attribute name="id" type="xs:int" use="required" />
    </xs:complexType>
</xs:element>
一些用法说明:
1、maxOccurs="unbounded"
maxOccurs为Occurrence 指示器,Occurrence 指示器用于定义某个元素出现的频率,有2种类型分别是 maxOccurs和minOccurs ,默认值均为 1。
① maxOccurs 指示器:规定某个元素可出现的最大次数
如<xs:element name="Name" type="xs:string" maxOccurs="10"/>
规定元素“Name”最少出现一次(其中 minOccurs 的默认值是 1),最多出现 10 次。
② minOccurs 指示器:规定某个元素能够出现的最小次数
如<xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="10"/>
规定元素“Name”最少出现0次,最多出现 10 次。
提示:如需使某个元素的出现次数不受限制,使用 maxOccurs="unbounded" 这个声明
上面<xs:element name="Person" maxOccurs="unbounded">表示元素“Person”出现次数最少一次(其中 minOccurs 的默认值是 1),并且任意次数。
2、<xs:sequence>
<xs:sequence>为“Order 指示器”,Order 指示器用于定义元素的顺序,有3种类型分别是All、Choice、Sequence。
① all 指示器:规定子元素可以按照任意顺序出现
② Choice 指示器:规定可出现某个子元素或者可出现另外一个子元素(非此即彼)
③ Sequence 指示器:规定子元素必须按照特定的顺序出现
上面例子代码用<xs:sequence>规定了子元素“Name”和“Age”必须按顺序出现。
3、use="required"
use 指示如何使用属性,有3种:
① optional :属性是可选的并且可以具有任何值。这是默认设置。
<xs:attribute name="id" type="xs:int"/>等价于
<xs:attribute name="id" type="xs:int" use="optional"/>
可验证通过<Person>或<Person id="1">
② required :属性必须出现一次
<xs:attribute name="id" type="xs:int" use="required"/>
可验证通过<Person id="1">
③ prohibited :不能使用属性。
<xs:attribute name="id" use="prohibited"/>
规定了不能使用id的属性。
实例1(无引用命名空间):
Persons.xml

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Persons>
  3. <Person id="1">
  4. <Name>张三</Name>
  5. <Age>120</Age>
  6. </Person>
  7. <Person id="2">
  8. <Name>李四</Name>
  9. <Age>20</Age>
  10. </Person>
  11. </Persons>

Persons.xsd

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  3. <xs:annotation>
  4. <xs:documentation> 本文档定义Persons.xml的格式 </xs:documentation>
  5. </xs:annotation>
  6. <xs:element name="Persons">
  7. <xs:complexType>
  8. <xs:sequence>
  9. <xs:element name="Person" maxOccurs="unbounded">
  10. <xs:complexType>
  11. <xs:sequence>
  12. <xs:element name="Name">
  13. <xs:simpleType>
  14. <xs:restriction base="xs:string">
  15. <xs:minLength value="2" />
  16. <xs:maxLength value="4" />
  17. </xs:restriction>
  18. </xs:simpleType>
  19. </xs:element>
  20. <xs:element name="Age">
  21. <xs:simpleType>
  22. <xs:restriction base="xs:string">
  23. <xs:pattern value="[1-9][0-9]?|1[01][0-9]|120" />
  24. </xs:restriction>
  25. </xs:simpleType>
  26. </xs:element>
  27. </xs:sequence>
  28. <xs:attribute name="id" use="required">
  29. <xs:simpleType>
  30. <xs:restriction base="xs:int"></xs:restriction>
  31. </xs:simpleType>
  32. </xs:attribute>
  33. </xs:complexType>
  34. </xs:element>
  35. </xs:sequence>
  36. </xs:complexType>
  37. </xs:element>
  38. </xs:schema>

实例2(有引用命名空间):
Persons2.xml

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.xxx.com/XxxSystem">
  3. <Person id="1">
  4. <Name>张三</Name>
  5. <Age>120</Age>
  6. </Person>
  7. <Person id="2">
  8. <Name>李四</Name>
  9. <Age>20</Age>
  10. </Person>
  11. </Persons>

Persons2.xsd

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xs:schema elementFormDefault="qualified"
  3. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  4. xmlns:tns="http://www.xxx.com/XxxSystem" >
  5. <xs:annotation>
  6. <xs:documentation> 本文档定义Persons.xml的格式 </xs:documentation>
  7. </xs:annotation>
  8. <xs:annotation>
  9. <xs:documentation>姓名</xs:documentation>
  10. </xs:annotation>
  11. <xs:simpleType name="T_Name">
  12. <xs:restriction base="xs:string">
  13. <xs:minLength value="2" />
  14. <xs:maxLength value="4" />
  15. </xs:restriction>
  16. </xs:simpleType>
  17. <xs:annotation>
  18. <xs:documentation>年龄</xs:documentation>
  19. </xs:annotation>
  20. <xs:simpleType name="T_Age">
  21. <xs:restriction base="xs:string">
  22. <xs:pattern value="[1-9][0-9]?|1[01][0-9]|120" />
  23. </xs:restriction>
  24. </xs:simpleType>
  25. <xs:annotation>
  26. <xs:documentation>属性ID</xs:documentation>
  27. </xs:annotation>
  28. <xs:simpleType name="T_id">
  29. <xs:restriction base="xs:int"></xs:restriction>
  30. </xs:simpleType>
  31. <xs:element name="Persons">
  32. <xs:complexType>
  33. <xs:sequence>
  34. <xs:element name="Person" maxOccurs="unbounded" type="tns:T_Person"/>
  35. </xs:sequence>
  36. </xs:complexType>
  37. </xs:element>
  38. <xs:complexType name="T_Person">
  39. <xs:sequence>
  40. <xs:element name="Name" type="tns:T_Name" />
  41. <xs:element name="Age" type="tns:T_Age" />
  42. </xs:sequence>
  43. <xs:attribute name="id" type="tns:T_id" use="required" />
  44. </xs:complexType>
  45. </xs:schema>

C# 使用xsd文件验证XML文件格式

[csharp] view plaincopyprint?

  1. /// <summary>
  2. /// 通过xsd验证xml格式是否正确,正确返回空字符串,错误返回提示
  3. /// </summary>
  4. /// <param name="xmlFile">xml文件</param>
  5. /// <param name="xsdFile">xsd文件</param>
  6. /// <param name="namespaceUrl">命名空间,无则默认为null</param>
  7. /// <returns></returns>
  8. public static string XmlValidationByXsd(string xmlFile, string xsdFile, string namespaceUrl = null) 
  9.         { 
  10.             StringBuilder sb = new StringBuilder();           
  11.             XmlReaderSettings settings = new XmlReaderSettings(); 
  12.             settings.ValidationType = ValidationType.Schema; 
  13.             settings.Schemas.Add(namespaceUrl, xsdFile); 
  14.             settings.ValidationEventHandler += (x,y)=> 
  15.             { 
  16.                 sb.AppendFormat("{0}|", y.Message); 
  17.             }; 
  18. using (XmlReader reader = XmlReader.Create(xmlFile, settings)) 
  19.             { 
  20. try
  21.                 { 
  22. while (reader.Read());                   
  23.                 } 
  24. catch (XmlException ex) 
  25.                 { 
  26.                     sb.AppendFormat("{0}|", ex.Message); 
  27.                 } 
  28.             } 
  29. return sb.ToString(); 
  30.         } 

2013-10-17备注

上面代码是验证xml文件,如果是xml字符串,则可用下面:

[csharp] view plaincopyprint?

  1. /// <summary>
  2. /// 通过xsd验证xml格式是否正确,正确返回空字符串,错误返回提示
  3. /// </summary>
  4. /// <param name="xmlText">xml文本内容</param>
  5. /// <param name="schemaFile">xsd文件</param>
  6. /// <returns></returns>
  7. public static string XmlValidateByXsd(string xmlText, string schemaFile) 
  8.        { 
  9.            StringBuilder sb = new StringBuilder(); 
  10.            XmlReaderSettings settings = new XmlReaderSettings(); 
  11.            settings.ValidationType = ValidationType.Schema; 
  12.            settings.Schemas.Add(null, schemaFile); 
  13.            settings.ValidationEventHandler += (x, y) => 
  14.            { 
  15.                sb.AppendFormat("{0}\n", y.Message); 
  16.            }; 
  17. using (XmlReader reader = XmlReader.Create(new StringReader(xmlText), settings)) 
  18.            { 
  19. try
  20.                { 
  21. while (reader.Read()) ; 
  22.                } 
  23. catch (XmlException ex) 
  24.                { 
  25.                    sb.AppendFormat("{0}\n", ex.Message); 
  26.                } 
  27.            } 
  28. return sb.ToString(); 
  29.        } 

原文地址:http://blog.csdn.net/gdjlc/article/details/11374787

XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式的更多相关文章

  1. 28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html XML Schema 语言也称作 XML Schema 定义(XML S ...

  2. XSD(XML Schema Definition)学习笔记

    今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...

  3. C# 使用xsd文件验证XML 格式是否正确

    C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...

  4. 【转】XSD (xml Schema Definition)

    来自:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html Xml Schema的用途 1.  定义一个Xml文档中都有什么元 ...

  5. XSD (xml Schema Definition)

    .xsd文件是定义DataSet的XML文件,利用XML文件的结构优势容易可视化地设计DataSet,设计完它会生成相应的.cs文件,里面的内容就是对应的类型化的DataSet.你的代码里的DataA ...

  6. XML Schema <第三篇>

    验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...

  7. 第三篇 -- XML Schema

    验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...

  8. XML Schema的基本语法(转)

    XML Schema的基本语法(转) XSDL(XML Schema定义语言)由元素.属性.命名空间和XML文档种的其他节点构成的. 一.XSD中的元素 XSD文档至少要包含:schema根元素和XM ...

  9. XML Schema

    XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...

随机推荐

  1. SSH面试题收藏

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件2. 读取并解析映射信息,创建SessionFactory3. 打开Sesssion4. 创建事务Transation5. 持 ...

  2. 构造一个简单的Linux系统MenuOS

    陈智威20135125 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验指导 ...

  3. 【转】深入理解JavaScript闭包闭包(closure) (closure)

    一.什么是闭包?"官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述 ...

  4. 估计PI——OpenCV&Cpp

    来源:<Learning Image Processing With OpenCV> 算法原理:蒙特卡洛 PI的计算公式: Cpp代码: #include <opencv2/open ...

  5. 领域设计之模型充血、Repository对象注入

    工作中接触了不少项目组,他们在实际的项目开发中,Domain Object的贫血模型设计,还是主要的应用的范式.原因在于,贫血模型模型设计中,把所有涉及持久化的业务逻辑,封装到了Domain Serv ...

  6. 三种renderman规范引擎的dice对比

    次表面做的有些烦躁,既然如此,索性先记一下前一阵比较的PIXIE.3delight.prman的dice方式. 研究过reyes的人都知道dice,简而言之,就是为了生成高质量高精度的图片(电影CG) ...

  7. 向peersim开火!P2P开火!(安装和样例运行)

    根据导师的要求,这次的任务是要模拟一个类似BT网络的P2P网络,并实现一些算法,查了些资料,都说NS2对于P2P网络的模拟和支持都不好,基本没有模板可以用,而且效率很低,只能模拟几万个节点左右,看到挺 ...

  8. Exchange 基本命令累计

    Get-ExchangeServer | fl name,edition,admindisplayversion  //查看exchange服务器版本

  9. /date(-62135596800000)转换正常格式的时间

    function formatDatebox(value) { if (value == null || value == '') { return ''; } var dt = parseToDat ...

  10. git学习:关于origin和master

    [转载请注明出处]http://www.cnblogs.com/mashiqi 2016/10/27 本文主要是对这篇博客文章的理解. git的服务器端(remote)端包含多个repository, ...