如何用 Visual C#.net 中的 DTD、 XDR,或 XSD 验证 XML 文档

来源:互联网 发布:服装设计师软件 编辑:程序博客网 时间:2024/04/30 11:30

本文演示了如何将文档类型定义 (DTD)、 一个 Microsoft XML 数据缩减 (XDR) 架构或 XML 架构定义语言 (XSD) 架构应用到一个可扩展标记语言 (XML) 文档。本文还介绍了如何使用XmlValidatingReader 类来验证指定的语法对 XML 文档,以及如何使用在内存中缓存的架构XmlSchemaCollection 类,以优化 XML 验证。

XML 文档包含的元素和属性。它们提供灵活且功能强大的一种方法中,应用程序和组织之间交换数据。若要指定允许的结构和内容的 XML 文档,您可以编写一个 DTD、 一个的 XDR 架构或 XSD 架构。XSD 架构是首选的方法若要指定在 Microsoft.net 框架但 dtd 的 XML 语法,还支持 XDR 架构。

回到顶端
要求
本文假定您熟悉下列主题:
Microsoft Visual C#.net 或 Microsoft Visual Basic.net 语法
包括验证问题的 XML 概念
回到顶端
创建 XML 文档
启动 Visual Studio.net。
创建新的 XML 文件在本地计算机上。
对 XML 文档,以表示一种产品目录中的添加以下数据:

保存该文件作为 Product.xml 在新的文件夹中名为 C:/MyFolder。
回到顶端
使用该 DTD
创建 DTD,并链接到 XML 文档
在 Visual Studio.net 中,创建一个空文本文件。
将下面的 DTD 声明添加到该文件描述 XML 文档的语法:


将文件另存为中将 C:/MyFolder Product.dtd 目录。
在 Visual Studio.net 中打开 Product.xml。
Product.xml 要链接到 DTD 文件的 XML 文档的顶部添加下面的 DOCTYPE 语句:


将修改后的 XML 文档保存为 ProductWithDTD.xml。
使用 DTD 验证 XML 文档
在 Visual Studio.net 中,创建一个新 Visual C# 控制台应用程序项目命名 ValidateXml。
将两个 using 语句添加到 Class1.cs 的开头,如下所示:


Class1.cs,在声明布尔型变量,如下所示命名 isValidMain 方法的开始之前:
 
创建要从 Main 方法中的文本文件中读取 XML 文档的 XmlTextReader 对象,然后创建一个XmlValidatingReader 来验证此 XML 数据,如下所示:


ValidationTypeXmlValidatingReader 对象的属性指示需要 (DTD、 XDR 或 架构) 的有效性规则的类型。将此属性设置为 DTD,如下所示:


如果发生任何验证错误,验证读取器将生成一个验证事件。添加以下代码以注册验证事件处理程序 (MyValidationEventHandler 方法中实现第 8 步):


添加以下代码以读取和验证 XML 文档。如果发生任何验证错误,MyValidationEventHandler 的调用,以解决该错误。此方法将 isValid 设置为 false (请参阅第 8 步)。您可以验证文档是否有效或无效后检查 isValid 的状态


Main 方法之后,写入 MyValidationEventHandler 方法,如下所示:

生成并运行该应用程序。应用程序应报告的 XML 文档有效。
在 Visual Studio.net 中,修改 ProductWithDTD.xml 以使它无效 (例如对于删除该"<productname>橄榄球运动衫</productname>"元素)。
再次运行该应用程序。您应收到以下错误消息:
验证事件
元素产品具有无效的内容。应为产品名称。
在 file:///C:/MyFolder/ProductWithDTD.xml(4, 5) 时,出现了一个错误。
是无效的文档
回到顶端
使用 XDR 架构
创建 XDR 架构并链接到 XML 文档
在 Visual Studio.net 中,创建一个空文本文件。
将下面的 XDR 架构定义添加到该文件描述 XML 文档的语法:


将文件另存为中将 C:/MyFolder Product.xdr 目录。
打开 Product.xml 源文件并将其链接到在 XDR 架构,如下所示:


将修改后的 XML 文档保存为 ProductWithXDR.xml。
使用 XDR 架构验证 XML 文档
修改您的应用程序,以便 XmlTextReader 加载 ProductWithXDR.xml,如下所示:
XmlTextReader r = new XmlTextReader("C://MyFolder//ProductWithXDR.xml");

XDR 到设置 ValidationType,以便验证读取器执行 XDR 验证:
v.ValidationType = ValidationType.XDR;

生成并运行该应用程序。应用程序应报告的 XML 文档有效。
修改 ProductWithXDR.xml 以使它无效。
生成并再次运行该应用程序。您应该会收到验证错误。
回到顶端
使用 XSD 架构
创建 XSD 架构并链接到 XML 文档
在 Visual Studio.net 中,创建一个空文本文件。
将以下 XSD 架构定义添加到该文件描述 XML 文档的语法:

将文件另存为中将 C:/MyFolder Product.xsd 目录。
打开原始 Product.xml,并将其链接到 XSD 架构,如下所示:


将修改后的 XML 文档保存为 ProductWithXSD.xml。
使用 XSD 架构验证 XML 文档
修改您的应用程序,以便 XmlTextReader 加载 ProductWithXSD.xml,如下所示:
XmlTextReader r = new XmlTextReader("C://MyFolder//ProductWithXSD.xml");

ValidationType 设 架构 中,以便验证读取器执行 XSD 架构验证:
v.ValidationType = ValidationType.Schema;

生成并运行应用程序以使用 XSD 架构验证 XML 文档。
回到顶端
使用 XSD 架构中的命名空间
在 Visual Studio.net 中,打开 ProductWithXSD.xml。
声明默认命名空间 urn: MyNamespace 文档中。此外,修改 XSD 链接,以便它指定 XSD 架构来验证此命名空间中的内容:


将所做的更改保存到 ProductWithXSD.xml。
打开 Product.xsd。因此,架构应用于命名空间,如下所示修改 <xsd:schema> 开始标记urn: MyNamespace:


将所做的更改保存到 Product.xsd。
生成并运行应用程序以使用 XSD 架构验证 XML 文档。
回到顶端
缓存命名空间
在 Visual Studio.net 中,打开 Class1.cs。Main 方法的开始处创建XmlSchemaCollection 对象,如下所示:
XmlSchemaCollection cache = new XmlSchemaCollection();

XmlSchemaCollection 对象允许您在内存中缓存架构以提高性能。每个架构都与一个不同的命名空间相关联。将下面的代码添加到缓存 Product.xsd:
cache.Add("urn:MyNamespace", "C://MyFolder//Product.xsd");

将以下语句创建要添加到 XmlValidatingReader 的架构缓存,以便读者可以使用内存中架构XmlValidatingReader 对象的代码的后面添加:
v.Schemas.Add(cache);

回到顶端
验证它工作的
生成,然后运行该应用程序。
验证 XML 文档仍验证 XSD 架构。
修改 ProductWithXSD.xml 以使它无效。
验证应用程序检测到这些验证错误。