转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html

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

实例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();
        }

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

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

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  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. Influx Sql系列教程二:retention policy 保存策略

    retention policy这个东西相比较于传统的关系型数据库(比如mysql)而言,是一个比较新的东西,在将表之前,有必要来看一下保存策略有什么用,以及可以怎么用 I. 基本操作 1. 创建re ...

  2. !与&&优先级的问题

    逻辑否(!)是一元操作符,逻辑与(&&)是二元操作符,一元操作符的优先级高于任何二元操作符. 例如: bool flag:int t: if(!flag && t &g ...

  3. [转帖]Redis性能解析--Redis为什么那么快?

    Redis性能解析--Redis为什么那么快? https://www.cnblogs.com/xlecho/p/11832118.html echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加e ...

  4. 如何在运行时更改JMeter的负载

    在某些情况下,能够在不停止测试的情况下更改性能测试产生的负载是有用的或必要的.这可以通过使用Apache JMeter™的恒定吞吐量计时器和Beanshell服务器来完成.在这篇文章中,我们将介绍如何 ...

  5. 《Mysql - 自增主键为何不是连续的?》

    一:自增主键是连续的么? - 自增主键不能保证连续递增. 二:自增值保存在哪里? - 当使用 show create table `table_name`:时,会看到 自增值,也就是 AUTO_INC ...

  6. 10分钟用scratch写一个大鱼吃小鱼的小游戏

    第一次给张江小朋友教Scratch课程之前,还在担心一些概念能不能向小朋友解释清楚,可上完课发现,我严重低估了小朋友的聪明程度,发现现在的孩子相比较自己8.9岁的时候,简直聪明太多倍了. 所以总结了半 ...

  7. 【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据

    从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件,需要用不同的驱动程序来实现. 在32位的机器 ...

  8. Spring Cloud Alibaba学习笔记(22) - Nacos配置管理

    目前业界流行的统一配置管理中心组件有Spring Cloud Config.Spring Cloud Alibaba的Nacos及携程开源的Apollo,本文将介绍Nacos作为统一配置管理中心的使用 ...

  9. Java 哈希表

    public int firstUniqChar(String s){ int[] freq=new int[26]; for(int i=0;i<s.length();i++){ freq[s ...

  10. Spring主要用到两种设计模式

    Spring主要用到两种设计模式 1.工厂模式 Spring容器就是实例化和管理全部Bean的工厂. 工厂模式可以将Java对象的调用者从被调用者的实现逻辑中分离出来. 调用者只关心被调用者必须满足的 ...