来源:http://www.cnblogs.com/haitian/archive/2008/05/16/1200707.html
xsd验证xml
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文件的后缀名为.xsd。
在下面的代码示例中,上面的架构添加到 XmlReaderSettings 对象的 XmlSchemaSetSchemas 属性中。 XmlReaderSettings 对象作为参数传递给验证上述 XML 文档的 XmlReader 对象的 Create 方法。
XmlReaderSettings 对象的 ValidationType 属性设置为 Schema,强制通过 XmlReader 对象的 Create 方法验证 XML 文档。将 ValidationEventHandler 添加到 XmlReaderSettings 对象以处理 XML 文档和架构验证过程中发现的错误所引发的任何 Warning 或 Error 事件。
下面是一个例子:
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
using System.Xml.Serialization;
using System.Text;
public class XmlSchemaSetExample
{
static void Main()
{
XmlReaderSettings booksSettings = new XmlReaderSettings();
booksSettings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
booksSettings.ValidationType = ValidationType.Schema;
booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);
MemoryStream ms = new MemoryStream();//定义一个数据流对象
XmlDocument doc = new XmlDocument();
doc.Load("contosoBooks.xml");
doc.Save(ms);
ms.Position = 0; //修改指针的位置
XmlReader books = XmlReader.Create(ms,booksSettings);
while (books.Read())
{ }
}
static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
Console.Read();
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
Console.Read();
}
}
}
contosoBooks.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
contosoBooks.xml
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" 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-11-17" 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-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
说明:
elementFormDefault 和 attributeFormDefault 都各有 2 个选项: unqualified, qualified. 那么它们分别都代表什么意思呢?默认值是 unqualified.
elementFormDefault=‘unqualified’ 时表示子元素不必使用命名空间前缀, 但这不等于说这些子元素是属于无命名空间, 所有被schema定义的element都应当属于目标命名空间, 这些子元素只是不直接位于目标命名空间, 而是从属于父顶级元素的目标命名空间, 这其实也就是说它们间接属于目标命名空间. 显然, 这种写法使得xml格式上简化了很多.
elementFormDefault=‘qualified’ 时表示子元素必须使用命名空间前缀, 当然, 这些子元素是位于目标命名空间之下.
备注:关于Xsd的其他的一些类或者实例
StreamWriter ,StreamReader,XmlSchema,XmlSchemaSet
Stream stream = new MemoryStream(); //当一个类的对象无法初始化时,可以考虑用它的继承类。
FileStream fs = File.Open("117.xml",FileMode.OpenOrCreate,FileAccess.ReadWrite);
TextReader tr1=new StreamReader("123.xml");
TextReader tr2= new StringReader("asdfsadfsdf");
分享到:
相关推荐
XSD验证XML的合法性: 1. **解析XSD**:首先,解析XSD文件以获取其定义的规则。 2. **匹配元素和属性**:遍历XML文档,检查每个元素和属性是否在XSD中定义,且格式正确。 3. **数据类型检查**:验证XML元素的值是否...
XML验证器(XSD验证XML)是指一种工具或程序,它能够检查XML文档是否符合预先定义的XSD模式。这个附带Delphi7源码的XML验证器,是为了解决在Delphi开发环境中对XML数据进行验证的需求。Delphi是一种流行的面向对象的...
在开发过程中,通过XSD验证XML文档是非常重要的一步,可以确保数据符合预设的规则。 在Visual Studio 2005(VS2005)中,使用C++来实现XML文档与XSD模式的验证是一个常见的需求。VS2005提供了一套强大的XML工具和库...
标题中的“xsd验证xml”指的是使用XML Schema Definition (XSD) 对XML文档进行验证的过程。在XML中,XSD是一种规范,它定义了XML文档的结构和数据类型,确保XML文档的数据符合预设的规则,从而提高数据的准确性和...
标题中的“纯Java(swing)写的xsd验证xml”是指使用Java编程语言,结合Swing图形用户界面库,开发的一个工具,用于验证XML文档是否符合指定的XSD(XML Schema Definition)规范。XML Schema是W3C推荐的一种XML文档...
以下是关于"C#验证XML是否满足XSD规则"的详细知识点: 1. **XML和XSD基础**: - XML:XML是一种自描述性的文本格式,它允许我们创建自定义的标签来表示数据。XML文档结构严谨,包含元素、属性、文本内容等。 - ...
附件是我写的一个demo程序,该程序的功能是根据一个定义好的XSD文件去检查指定的XML文件是否满足XSD的约束。 这里的约束比标准的约束要弱一些,比如:这里的约束不限制元素出现的顺序,只关心有没有这个元素。 我...
NULL 博文链接:https://nickfover.iteye.com/blog/2155663
验证xml文件与xsd是否匹配
将XML文件转换为XSD文件,主要是为了更好地管理和验证XML文档的结构,确保数据的一致性和准确性,同时也便于生成对应的Java类,以进行程序开发。 在Java开发中,经常需要处理XML数据。有了XSD文件,开发者可以使用...
该软件包的目标是将xsd文件预加载到内存中,并使用libxml2(快速)验证xml,例如xml服务端点或api路由器的后主体。 在撰写本文时,我在github上找到的类似软件包没有提供错误详细信息,或者卡在了负载下。 除了提供...
在标题“利用xsd校验xml”中,我们讨论的核心是通过XML Schema(XSD)来验证XML文档是否符合预定义的模式。这个过程是确保XML数据有效性和正确性的重要步骤,特别是当XML被用作数据交换或者在复杂的系统间通信时。 ...
XML用于结构化数据的存储和传输,而XSD则为XML文档提供了语义验证的规则。本教程将详细介绍如何在Java环境中生成XML和XSD文件。 XML是一种标记语言,它允许我们在文档中定义元素、属性和结构。这些元素和属性描述了...
一旦有了XSD,我们就可以根据这个模式验证XML文档,确保其符合规范。 在“Xsd转换xml”这个场景中,通常指的是利用XSD文件生成对应的XML实例文档。这个过程是基于XSD的规则,自动生成一个符合该模式的XML文档。这在...
在开发过程中,验证XML文档的有效性是非常重要的一步,可以预防因数据格式错误导致的问题。 在VS2005中,我们可以使用C#语言来实现XSD对XML的验证。C#提供了丰富的类库,如System.Xml和System.Xml.Schema,这些类库...
4. **生成XML**:当所有输入都通过验证后,编辑器将这些数据转化为符合XSD结构的XML元素和属性,形成完整的XML文档。 除了IETM系统,这种根据XSD创建XML的方法也广泛应用于其他场景,如数据交换、Web服务、配置文件...
XML Schema语言也就是XML Schema Definition (XSD)。 XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档...
之前做一个开发项目,要校验xml报文合法性,根据Schema使用javax.xml.validation.Validator倒是能验证XML,但是要求是顺序一致才行,一直没找到合适的排序,就自己写了一个排序代码,根据xsd规范文件给xml排序,有...
- **使用XSD验证XML**:通过解析器或编程语言库,将XML文档与XSD进行对比,检查文档是否符合定义。 - **错误处理**:验证过程中发现的错误会以错误消息的形式返回,帮助开发者定位问题。 8. **XSD工具** - **XML...