XSD文件详解(二)
<?xml version="1.0" encoding="gb2312"?>
<studentlist>
<student id="A101">
<name>李华</name>
<sex>男</sex>
<birthday>1978.9.12</birthday>
<score>92</score>
<skill>Java</skill>
<skill>Oracle</skill>
<skill>C Sharp</skill>
<skill>SQL Server</skill>
</student>
<studentlist>
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="原子类型" targetNamespace="http://student.com" elementFormDefault="qualified"
xmlns="http://student.com" xmlns:mstns="http://student.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="nameType"/>
<xs:element ref="age"/>
<xs:element ref="sex"/>
<xs:element ref="phone"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="nameType">
<xs:restriction base="xs:string">
<xs:minLength value="4"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="sex">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="phone">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{3}-\d{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
MSDN上面一个例子:
<!-- booksSchema.xml -->
<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore xmlns = "schema.xsd">
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<first-name>Sidas</first-name>
<last-name>Plato</last-name>
</author>
<price>9.99</price>
</book>
</bookstore>
<!-- schema.xsd -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="schema.xsd"
elementFormDefault="qualified"
targetNamespace="schema.xsd">
<xsd:element name="bookstore" type="bookstoreType"/>
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="book" type="bookType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="authorName"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="genre" type="xsd:string"/>
<xsd:attribute name="publicationdate" type="xsd:string"/>
<xsd:attribute name="ISBN" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string"/>
<xsd:element name="last-name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<!-- bookSchemaFail.xml -->
<?xml version='1.0'?>
<bookstore xmlns="schema.xsd">
<book>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
</book>
<book genre="novel">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
namespace SchemaData
{
/// <summary>
/// Validator 的摘要说明。
/// </summary>
public class Validator
{
private const String document3 = "booksSchema.xml";
private const String document4 = "booksSchemaFail.xml";
private const String document5 = "schema.xsd";
private XmlValidatingReader myXmlValidatingReader = null;
private XmlTextReader myXmlTextReader = null;
private Boolean Success = true;
private String[] args = {document3, document4, document5};
public Validator()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void Run()
{
try
{
XmlSchemaCollection myXmlSchemaCollection = new XmlSchemaCollection();
myXmlSchemaCollection.Add("schema.xsd" , new XmlTextReader(args[2]));
// 用架构验证 XML 文件
Success = true;
Console.WriteLine();
Console.WriteLine("正在用架构文件 schema.xsd 验证 XML 文件 booksSchema.xml ...");
myXmlTextReader = new XmlTextReader (args[0]);
myXmlValidatingReader = new XmlValidatingReader(myXmlTextReader);
myXmlValidatingReader.Schemas.Add(myXmlSchemaCollection);
myXmlValidatingReader.ValidationType = ValidationType.Schema;
Validate();
// 架构验证失败
Success = true;
Console.WriteLine();
Console.WriteLine("正在用架构文件 schema.xsd 验证 XML 文件 booksSchemaFail.xml ...");
myXmlTextReader = new XmlTextReader (args[1]);
myXmlValidatingReader = new XmlValidatingReader(myXmlTextReader);
myXmlValidatingReader.Schemas.Add(myXmlSchemaCollection);
myXmlValidatingReader.ValidationType = ValidationType.Schema;
Validate();
}
catch (Exception e)
{
Console.WriteLine("异常:" + e.ToString());
}
finally
{
// 通过 XmlTextReader 完成
if (myXmlValidatingReader != null)
myXmlValidatingReader.Close();
}
}
private void Validate()
{
try
{
// 设置验证事件处理程序
myXmlValidatingReader.ValidationEventHandler += new ValidationEventHandler (this.ValidationEventHandle);
// 读取 XML 数据
while (myXmlValidatingReader.Read()){}
Console.WriteLine ("验证已完成。验证 {0}", (Success==true ? "成功" : "失败"));
}
catch (XmlException e)
{
Console.WriteLine ("Xml 异常:" + e.ToString());
}
catch (Exception e)
{
Console.WriteLine ("异常:" + e.ToString());
}
}
public void ValidationEventHandle (object sender, ValidationEventArgs args)
{
Success = false;
Console.WriteLine("\t验证错误:" + args.Message);
if (args.Severity == XmlSeverityType.Warning)
{
Console.WriteLine("未找到要强制验证的架构。");
}
else
if (args.Severity == XmlSeverityType.Error)
{
Console.WriteLine("验证实例文档时发生验证错误。");
}
if (args.Exception != null) // XSD 架构验证错误
{
Console.WriteLine(args.Exception.SourceUri + "," + args.Exception.LinePosition + "," + args.Exception.LineNumber);
}
//if (myXmlValidatingReader.Reader.LineNumber > 0)
//{
// Console.WriteLine("Line: "+ myXmlValidatingReader.Reader.LineNumber + " Position: " + myXmlValidatingReader.Reader.LinePosition);
//}
}
}
}
XSD文件详解(二)的更多相关文章
- jni.h头文件详解二
作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...
- 【转】 jni.h头文件详解(二)
原文网址:http://blog.csdn.net/shaohuazuo/article/details/42932813 作者:左少华 博客:http://blog.csdn.net/shaohua ...
- XSD文件详解
XSD (xml Schema Definition) Xml Schema的用途 1. 定义一个Xml文档中都有什么元素 2. 定义一个Xml文档中都会有什么属性 3. 定义某个节点的都有什么 ...
- PE文件详解二
本文转自小甲鱼的PE文件相关教程,原文传送门 咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用! 接着我们来谈谈 IMAGE_OPTIONAL_HEADER 结构 ...
- MyBatis之Mapper XML 文件详解(二)-sql和入参
sql 这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中.它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化. 比如: <sql id="use ...
- [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...
- Maven pom.xml文件详解
Maven pom.xml文件详解 一.简介 POM全称是Project Object Model,即项目对象模型. pom.xml是maven的项目描述文件,它类似与antx的project.xml ...
- Mybatis SQL映射文件详解
Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...
- Shiro 安全框架详解二(概念+权限案例实现)
Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...
随机推荐
- cocurrent包 锁 Lock
20. 锁 Lock java.util.concurrent.locks.Lock 是一个类似于 synchronized 块的线程同步机制.但是 Lock 比 synchronized 块更加灵活 ...
- mailkit----163邮箱登录拉取邮件的坑
在使用mailkit的ImapClient拉取邮件的时候,如果我们使用的是网易的邮箱(如:163.126等),如果你没有按照网易的设置去打开IMAP协议,那么将无法登录邮箱,并且发送一封使用不安全的客 ...
- 从头认识java-14.4 Java提供的数组的有用功能(2)
接着上一章节,我们继续介绍Java提供的数组的有用功能. 3.元素的对照Comparator package com.ray.ch14; import java.util.Arrays; import ...
- 用new和delete运算符进行动态分配和撤销存储空间
測试描写叙述:暂时开辟一个存储空间以存放一个结构体数据 #include <iostream> #include <string> using namespace std; s ...
- 对中级 Linux 用户非常有用的 20 个命令
FROM:http://www.oschina.net/translate/20-advanced-commands-for-middle-level-linux-users 21. 命令: Find ...
- linux:ping不通www.baidu.com
如果某台Linux服务器ping不通域名, 如下提示: [root@localhost ~]# ping www.baidu.com ping: unknown host www.baidu.com ...
- C++003基础
1.C++对C的扩展 1简单的C++程序 1.1求圆的周长和面积 数据描写叙述: 半径.周长,面积均用实型数表示 数据处理: 输入半径 r. 计算周长 = 2*π*r : 计算面积 = π* r2 . ...
- 重入锁的好搭档:Condition条件(读书笔记)
Condition结构提供了基本方法如下: void await() throws InterruptedException; void awaitUninterruptibly(); long ...
- 【MVC4】依頼注入
※本文参照<ASP.NET MVC 4高级编程>
- List装form
List<MemberPrivilegeForm> formlist = new ArrayList<MemberPrivilegeForm>(); int status = ...