XSD是指XML结构定义 ( XML Schemas Definition ) XML Schema 是DTD的替代品。XML Schema语言也就是XSD。 XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。 一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。 XSD是DTD替代者的原因,一是据将来的条件可扩展,二是比DTD丰富和有用,三是用XML书写,四是支持数据类型,五是支持命名空间。 XSD文件的后缀名为.xsd。 XML Schema的优点: 1) XML Schema基于XML,没有专门的语法 2) XML可以象其他XML文件一样解析和处理 3) XML Schema支持一系列的数据类型(int、float、Boolean、date等) 4) XML Schema提供可扩充的数据模型。 5) XML Schema支持综合命名空间 6) XML Schema支持属性组。
对xml文件的操作:http://www.cnblogs.com/jhtchina/archive/2007/06/05/691610.html
<!-- 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><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <!-- 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 ><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <!-- 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 ><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 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); // } } } }