如何用 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 以使它无效。
验证应用程序检测到这些验证错误。
- 如何用 Visual C#.net 中的 DTD、 XDR,或 XSD 验证 XML 文档
- XML DTD XSD XSL XDR描述
- XML DTD XSD XSL XDR都有什么区别?
- XML DTD XSD XSL XDR都有什么区别?
- (转) XML DTD XSD XSL XDR的区别
- 验证xml--xsd和dtd
- 如何用xmlspy将xml文档生成xsd文件?
- 介绍如何用C#.NET读写XML文档资料
- XML中的DTD和XSD
- .NET 用XSD验证XML
- 注册 XML Catalog 解决 Eclipse 中 XML 验证时 dtd /xsd 实体未找到 或 连接主机超时的问题
- xml 之 dtd xsd
- xml dtd xsd
- XML DTD 与XSD
- XML的DTD,XSD
- Delphi 7验证XML合法性(利用DTD、XSD)
- 关于XML的验证(DTD与XSD)一点实践
- 如何用XML SCHEMA 验证xml文?
- Lua5.1的元方法__call的使用示例
- ipconfig和ifconfig
- "Essential WPF - Chapter 6 Data" 阅读笔记
- oracle ora-12537 连接关闭的解决方案
- 利用人性弱电的互联网服务
- 如何用 Visual C#.net 中的 DTD、 XDR,或 XSD 验证 XML 文档
- 基于人性的七种网络商业逻辑
- 在C#中应用PSFTP实现SFTP上传
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- Bad version number in .class file
- HTTP协议header头域
- 基于“理性”的五种网络商业逻辑
- 在一台没有安装MVC3的服务器上运行ASP.NET MVC3应用程序
- 收藏一: IT技术类