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

<?xml version="1.0" encoding="UTF-8"?>
<Persons><Person id="1"><Name>张三</Name>  <Age>120</Age>  </Person>  <Person id="2">  <Name>李四</Name>  <Age>20</Age>  </Person>
</Persons>

Persons.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"><xs:annotation><xs:documentation> 本文档定义Persons.xml的格式 </xs:documentation></xs:annotation><xs:element name="Persons"><xs:complexType><xs:sequence><xs:element name="Person" maxOccurs="unbounded"><xs:complexType><xs:sequence><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="Age"><xs:simpleType><xs:restriction base="xs:string"><xs:pattern value="[1-9][0-9]?|1[01][0-9]|120" /></xs:restriction></xs:simpleType></xs:element></xs:sequence>      <xs:attribute name="id" use="required"><xs:simpleType><xs:restriction base="xs:int"></xs:restriction></xs:simpleType></xs:attribute></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:schema>

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

Persons2.xml

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

Persons2.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:tns="http://www.xxx.com/XxxSystem" ><xs:annotation><xs:documentation> 本文档定义Persons.xml的格式 </xs:documentation></xs:annotation><xs:annotation><xs:documentation>姓名</xs:documentation></xs:annotation><xs:simpleType name="T_Name"><xs:restriction base="xs:string"><xs:minLength value="2" /><xs:maxLength value="4" /></xs:restriction></xs:simpleType><xs:annotation><xs:documentation>年龄</xs:documentation></xs:annotation><xs:simpleType name="T_Age"><xs:restriction base="xs:string"><xs:pattern value="[1-9][0-9]?|1[01][0-9]|120" /></xs:restriction></xs:simpleType><xs:annotation><xs:documentation>属性ID</xs:documentation></xs:annotation><xs:simpleType name="T_id"><xs:restriction base="xs:int"></xs:restriction></xs:simpleType><xs:element name="Persons"><xs:complexType><xs:sequence><xs:element name="Person" maxOccurs="unbounded" type="tns:T_Person"/></xs:sequence></xs:complexType></xs:element><xs:complexType name="T_Person"><xs:sequence><xs:element name="Name" type="tns:T_Name" /><xs:element name="Age" type="tns:T_Age" /></xs:sequence><xs:attribute name="id" type="tns:T_id" use="required" /></xs:complexType></xs:schema>

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

/// <summary>/// 通过xsd验证xml格式是否正确,正确返回空字符串,错误返回提示/// </summary>/// <param name="xmlFile">xml文件</param>/// <param name="xsdFile">xsd文件</param>/// <param name="namespaceUrl">命名空间,无则默认为null</param>/// <returns></returns>public static string XmlValidationByXsd(string xmlFile, string xsdFile, string namespaceUrl = null){StringBuilder sb = new StringBuilder();          XmlReaderSettings settings = new XmlReaderSettings();settings.ValidationType = ValidationType.Schema;settings.Schemas.Add(namespaceUrl, xsdFile);settings.ValidationEventHandler += (x,y)=>{sb.AppendFormat("{0}|", y.Message);};using (XmlReader reader = XmlReader.Create(xmlFile, settings)){try{while (reader.Read());                  }catch (XmlException ex){sb.AppendFormat("{0}|", ex.Message);}}return sb.ToString();}

2013-10-17备注

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

 /// <summary>/// 通过xsd验证xml格式是否正确,正确返回空字符串,错误返回提示/// </summary>/// <param name="xmlText">xml文本内容</param>/// <param name="schemaFile">xsd文件</param>/// <returns></returns>public static string XmlValidateByXsd(string xmlText, string schemaFile){StringBuilder sb = new StringBuilder();XmlReaderSettings settings = new XmlReaderSettings();settings.ValidationType = ValidationType.Schema;settings.Schemas.Add(null, schemaFile);settings.ValidationEventHandler += (x, y) =>{sb.AppendFormat("{0}\n", y.Message);};using (XmlReader reader = XmlReader.Create(new StringReader(xmlText), settings)){try{while (reader.Read()) ;}catch (XmlException ex){sb.AppendFormat("{0}\n", ex.Message);}}return sb.ToString();}

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

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

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

  2. fclose在c语言中的作用,c语言fcloseall函数用法实例介绍

    c语言fcloseall函数用法实例介绍.fcloseall函数的返回值,函数 fcloseall() 将所有打开的流与其底层的文件或功能集合关闭.任何缓冲的数据都将首先被写入,使用 fflush(3 ...

  3. Xsd文件验证xml的java实现

    xsd文件验证xml的java实现 今天在修改数据交换平台时候,看见其中使用此技术 import java.io.File; import java.io.IOException; import ja ...

  4. 【转】XSD (xml Schema Definition)

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

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

    //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xml version="1.0" encod ...

  6. java xsd 解析 xml文件_Java针对XSD文件验证XML文件的最佳方法是什么?

    小编典典 Java运行时库支持验证.上次我检查的是幕后的Apache Xerces解析器.你可能应该使用javax.xml.validation.Validator. import javax.xml ...

  7. XML Schema全接触 (这里主要介绍W3C的Schema标准语法)

    来源:http://bbs.w3china.org/dispbbs.asp?BoardID=23&ID=27215&ReplyID=22178&skin=1 XML Schem ...

  8. 理解 XML Schema:XML Schema 初步 (I)

    理解 XML Schema:XML Schema 初步 (I) 内容: 购买订单模式文档 复合类型定义,元素和属性声明 出现约束 全局元素和属性 命名冲突 简单类型 列表类型(List Type) 联 ...

  9. 理解XML Schema: XML Schema 初步 (I)(转)

    本文章系列是XML Schema的一个从入门到进阶的基本教程.内容主要翻译整理了W3C关于XML Schema的入门级规范:XML Schema Part 0: Primer( http://www. ...

最新文章

  1. 程序员大危机,工作难逃监视系统“法眼”!
  2. 字符串中不重复字符出现第一次的位置
  3. 骑士旅行pascal解题程序
  4. MyBatis运行原理(一)SqlSessionFactory对象创建过程分析
  5. oracle的脚本语言是什么意思,Oracle中的sql脚本语言中的循环语句介绍
  6. 变量声明方式:let与var的区别
  7. Could not link against boost_system 解决办法
  8. 细节真的能决定成败么?
  9. vscode中文_VS Code 中文社区正式成立啦!VS Code Day 圆满落幕!
  10. 10分钟大数据Hadoop基础入门
  11. emlog模板-蓝叶博客模板源码-清新大气模板,适合做博客和资源一体!亲测
  12. 阿里巴巴 Alibaba
  13. PTA 7-14 电话聊天狂人(25 分)map的应用
  14. RecyclerView嵌套实现购物车
  15. Vue中使用百度地图做路径分析并根据起终点坐标模拟道路里程桩
  16. 关于电脑CPU双核四线程
  17. 数据中心电气施工工序工艺管理要点
  18. JS的this关键字
  19. 【置顶帖】关于博主/关于博客/博客大事记
  20. java web 青科大_青科大正方教务管理系统

热门文章

  1. CommonJs和ESModule的区别及优缺点
  2. 从卷积神经网络(CNN)到图卷积神经网络(GCN)详解
  3. Web全栈~38.Vue
  4. with root cause 解决办法
  5. Linux 手动清除网卡的IP地址
  6. vector 多维向量定义及其初始化
  7. h5打开麦克风权限录音_h5打开麦克风权限录音_通过H5实现html页面的录音和播放 (Recorder用于html5录音)......
  8. Zookeeper——3、使用zkClient操作zookeeper
  9. 数据分析与可视化 --aws云平台
  10. MySQL面试题学习笔记