XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
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?
- <?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
[html] view plaincopyprint?
- <?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
[html] view plaincopyprint?
- <?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
[html] view plaincopyprint?
- <?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文件格式
[csharp] view plaincopyprint?
- /// <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字符串,则可用下面:
[csharp] view plaincopyprint?
- /// <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();
- }
原文地址:http://blog.csdn.net/gdjlc/article/details/11374787
XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式的更多相关文章
- 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 ...
- XSD(XML Schema Definition)学习笔记
今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...
- C# 使用xsd文件验证XML 格式是否正确
C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...
- 【转】XSD (xml Schema Definition)
来自:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html Xml Schema的用途 1. 定义一个Xml文档中都有什么元 ...
- XSD (xml Schema Definition)
.xsd文件是定义DataSet的XML文件,利用XML文件的结构优势容易可视化地设计DataSet,设计完它会生成相应的.cs文件,里面的内容就是对应的类型化的DataSet.你的代码里的DataA ...
- XML Schema <第三篇>
验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...
- 第三篇 -- XML Schema
验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...
- XML Schema的基本语法(转)
XML Schema的基本语法(转) XSDL(XML Schema定义语言)由元素.属性.命名空间和XML文档种的其他节点构成的. 一.XSD中的元素 XSD文档至少要包含:schema根元素和XM ...
- XML Schema
XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...
随机推荐
- 修改 Docker 默认网桥地址
在公司里搭建docker测试环境,需要访问内部的服务, 由于网段是172.17.导致该容器没有办法正常访问公司内部服务.翻了一下官方的帮助文档,找到了修改默认网桥地址的办法. 首先停止正在使用的 Do ...
- Xcode 7.0升级后的bitcode
iOS 9.0中加入了一个新的功能,bitcode, 使用bitcode优化的app,体积可以变得更小. Apple可以在提交app后,向9.0及以上版本用户提供优化的小体积版本,向其他用户提供常规版 ...
- j2ee学习资料收集
1 tomcat web.xml加载顺序, 讲解了web.xml什么时候加载,内部的各个组件加载的顺序 http://blog.sina.com.cn/s/blog_4553489c01010 ...
- C#数组全解
数组概述 C# 数组从零开始建立索引,即数组索引从零开始.C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似.但还有一些差异应引起注意. 声明数组时,方括号 ([]) 必须跟在类型后面,而不 ...
- The first day to learn Englisht
IF you want to go fast,to alone. IF you want to go far,go with others.
- java经典题目
/***********Ryear.java begin********************/ import java.util.Scanner;public class Ryear { /** ...
- java并发编程学习笔记(一)初识并发原子性
1.并发的意义 现在是一个多核的时代,并发的存在意义就是为了能够充分利用多核计算机的优势,提高程序的运行效率: 2.并发的风险 竞争-----多个线程对内存数据数据进行读写操作时,对数据处理结果的一个 ...
- 浅谈JavaScript的作用域
前段时间学了下JavaScript作用域,这个东西在JavaScript非常重要,也是JavaScript很基础的东西,正如少林里面基础武功,有了基础,才能学绝世武功. 作用域的作用是啥?一套设计良好 ...
- Html 之div+css布局之css选择器
CSS选择器 什么叫选择器?通俗的来说就是 我想改变html 中某个地方的 字体大小 或者背景色 或者其它属性 内边距 外边距,宽度高度 等等 一些Css 样式. 那么我们如何找到对应的 元素呢? ...
- [驱动开发] struct _LDR_DATA_TABLE_ENTRY
@Windows XP Professional Service Pack 3 (x86) (5.1, Build 2600) lkd> dt -b _LDR_DATA_TABLE_ENTRY ...