booksSchemaFail.xml
xmlns 声明了xml 所引用的 schema的name,不是文件名,是xsd 里定义的 targetNamespace 名
<?xml version='1.0'?><bookstore xmlns="urn:bookstore-schema">
<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>
book.xsd
定义都以 <xsd: 开始; 首先是<xsd:schema 元素是 架构文档中第一的顶级元素
xmlns是XML Namespaces的缩写,中文名称是XML命名空间。
URI http://www.w3.org/XML/1998/namespace 用于 XML 命名空间声明。此 URI 是保留的命名空间,不能包括在 XML 命名空间声明中。
xsd:element 定义名称,type有自带类型和复杂类型.
xsd:complexType 定义复杂类型
xsd:sequence 定义元素出现的顺序
maxOccurs 定义的是最大出现次数,unbounded 就是可以多次
xmlns:xsd 默认命名空间 xsd 为别名
xmlns 默认明明空间名称
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:bookstore-schema"
elementFormDefault="qualified"
targetNamespace="urn:bookstore-schema">
<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: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>
在代码中用xsd来验证xml
步骤:1.设置xsd的缓存, XmlSchemaSet
2. XmlReaderSettings设置指定验证type,验证的具体方法(及验证时候遇到错误打印出来的方法)
3. XMLreader,设置xmlreader 的creater方法
4.遍历读取,直到reader为空
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Schema;
namespace XML学习_控制台应用程序
{class Program
{static void Main(string[] args){try
{#region XMLDocument操作xml/*
XmlDocument a = new XmlDocument();a.LoadXml("<book isbn=\"900-100-SSS333333333\"><name>名字</name></book>");XmlNode root = a.DocumentElement; //获取文档根节点root.InnerText = "wo lai le";XmlElement xchild = a.CreateElement("price");xchild.SetAttribute("yuanjia", "200");xchild.SetAttribute("xianjia","19");xchild.InnerText = "19.00";root.InsertBefore(xchild, root.FirstChild);//root.AppendChild(xchild);//root.RemoveChild(root.ChildNodes[0]);//root.RemoveChild(xchild);a.Save("data.xml");*/#endregion#region xsd验证xmlXmlSchemaSet sc = new XmlSchemaSet();
sc.Add("urn:bookstore-schema", "books.xsd"); // 命名空间,xsd名字XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;settings.Schemas = sc;settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
XmlReader reader = XmlReader.Create("booksSchemaFail.xml",settings);
while (reader.Read()) ;
#endregion}catch (Exception eee)
{Console.WriteLine(eee.Message);}finally
{Console.ReadLine();}}// Display any validation errors.private static void ValidationCallBack(object sender, ValidationEventArgs e){Console.WriteLine("Validation Error: {0}", e.Message);
}}}