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="student" elementFormDefault="qualified"
xmlns="student" xmlns:mstns="student" xmlns:xs="/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上⾯⼀个例⼦:
<!-- l  -->
<?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="/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"/>
genre
<xsd:element  name="last-name"  type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<!-- l  -->
<?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  =  "l";
private const  String  document4  =  "l";
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  ⽂件  l  ...");
    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  ⽂件  l  ...");        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);    //}
  }
  }
  }