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

11 篇文章 0 订阅

本文演示了如何将文档类型定义 (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 文档

  1. 启动 Visual Studio.net。
  2. 创建新的 XML 文件在本地计算机上。
  3. 对 XML 文档,以表示一种产品目录中的添加以下数据:
    <Product ProductID="123">
       <ProductName>Rugby jersey</ProductName>
    </Product>
    					
  4. 保存该文件作为 Product.xml 在新的文件夹中名为 C:/MyFolder。

使用该 DTD

创建 DTD,并链接到 XML 文档
  1. 在 Visual Studio.net 中,创建一个空文本文件。
  2. 将下面的 DTD 声明添加到该文件描述 XML 文档的语法:
    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    					
  3. 将文件另存为中将 C:/MyFolder Product.dtd 目录。
  4. 在 Visual Studio.net 中打开 Product.xml。
  5. Product.xml 要链接到 DTD 文件的 XML 文档的顶部添加下面的 DOCTYPE 语句:
    <?xml version="1.0"?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    					
  6. 将修改后的 XML 文档保存为 ProductWithDTD.xml。
使用 DTD 验证 XML 文档
  1. 在 Visual Studio.net 中,创建一个新 Visual C# 控制台应用程序项目命名 ValidateXml。
  2. 将两个 using 语句添加到 Class1.cs 的开头,如下所示:
    using System.Xml;        // for XmlTextReader and XmlValidatingReader
    using System.Xml.Schema; // for XmlSchemaCollection (which is used later)
    					
  3. Class1.cs,在声明布尔型变量,如下所示命名 isValidMain 方法的开始之前:
    private static bool isValid = true;      // If a validation error occurs,
                                             // set this flag to false in the
                                             // validation event handler. 
  4. 创建要从 Main 方法中的文本文件中读取 XML 文档的 XmlTextReader 对象,然后创建一个XmlValidatingReader 来验证此 XML 数据,如下所示:
    XmlTextReader r = new XmlTextReader("C://MyFolder//ProductWithDTD.xml");
    XmlValidatingReader v = new XmlValidatingReader(r);
    					
  5. ValidationTypeXmlValidatingReader 对象的属性指示需要 (DTD、 XDR 或 架构) 的有效性规则的类型。将此属性设置为 DTD,如下所示:
    v.ValidationType = ValidationType.DTD;
    					
  6. 如果发生任何验证错误,验证读取器将生成一个验证事件。添加以下代码以注册验证事件处理程序 (MyValidationEventHandler 方法中实现第 8 步):
    v.ValidationEventHandler += 
       new ValidationEventHandler(MyValidationEventHandler);
    					
  7. 添加以下代码以读取和验证 XML 文档。如果发生任何验证错误,MyValidationEventHandler 的调用,以解决该错误。此方法将 isValid 设置为 false (请参阅第 8 步)。您可以验证文档是否有效或无效后检查 isValid 的状态
    while (v.Read())
    {
       // Can add code here to process the content.
    }
    v.Close();
    
    // Check whether the document is valid or invalid.
    if (isValid)
       Console.WriteLine("Document is valid");
    else
       Console.WriteLine("Document is invalid");
    					
  8. Main 方法之后,写入 MyValidationEventHandler 方法,如下所示:
    public static void MyValidationEventHandler(object sender, 
                                                ValidationEventArgs args) 
    {
       isValid = false;
       Console.WriteLine("Validation event/n" + args.Message);
    }
    					
  9. 生成并运行该应用程序。应用程序应报告的 XML 文档有效。
  10. 在 Visual Studio.net 中,修改 ProductWithDTD.xml 以使它无效 (例如对于删除该"<productname>橄榄球运动衫</productname>"元素)。
  11. 再次运行该应用程序。您应收到以下错误消息:
    验证事件
    元素产品具有无效的内容。应为产品名称。
    在 file:///C:/MyFolder/ProductWithDTD.xml(4, 5) 时,出现了一个错误。
    是无效的文档

使用 XDR 架构

创建 XDR 架构并链接到 XML 文档
  1. 在 Visual Studio.net 中,创建一个空文本文件。
  2. 将下面的 XDR 架构定义添加到该文件描述 XML 文档的语法:
    <?xml version="1.0"?>
    <Schema name="ProductSchema" 
            xmlns="urn:schemas-microsoft-com:xml-data"
            xmlns:dt="urn:schemas-microsoft-com:datatypes">
    
       <ElementType name="Product" content="eltOnly">
          <attribute type="ProductID" required="yes"/>
          <element type="ProductName"/>
       </ElementType>
    
       <AttributeType name="ProductID" dt:type="int"/>
       <ElementType name="ProductName" dt:type="string"/>
    </Schema>
    					
  3. 将文件另存为中将 C:/MyFolder Product.xdr 目录。
  4. 打开 Product.xml 源文件并将其链接到在 XDR 架构,如下所示:
    <?xml version="1.0"?>
    <Product ProductID="123" xmlns="x-schema:Product.xdr"> 
       <ProductName>Rugby jersey</ProductName>
    </Product>
    					
  5. 将修改后的 XML 文档保存为 ProductWithXDR.xml。
使用 XDR 架构验证 XML 文档
  1. 修改您的应用程序,以便 XmlTextReader 加载 ProductWithXDR.xml,如下所示:
    XmlTextReader r = new XmlTextReader("C://MyFolder//ProductWithXDR.xml");
    					
  2. XDR 到设置 ValidationType,以便验证读取器执行 XDR 验证:
    v.ValidationType = ValidationType.XDR;
    					
  3. 生成并运行该应用程序。应用程序应报告的 XML 文档有效。
  4. 修改 ProductWithXDR.xml 以使它无效。
  5. 生成并再次运行该应用程序。您应该会收到验证错误。

使用 XSD 架构

创建 XSD 架构并链接到 XML 文档
  1. 在 Visual Studio.net 中,创建一个空文本文件。
  2. 将以下 XSD 架构定义添加到该文件描述 XML 文档的语法:
    <?xml version="1.0"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <xsd:element name="Product">
          <xsd:complexType>
             <xsd:sequence>
                <xsd:element name="ProductName" type="xsd:string"/>
             </xsd:sequence>
             <xsd:attribute name="ProductID" use="required" type="xsd:int"/>
          </xsd:complexType>
       </xsd:element>
    </xsd:schema>
    					
  3. 将文件另存为中将 C:/MyFolder Product.xsd 目录。
  4. 打开原始 Product.xml,并将其链接到 XSD 架构,如下所示:
    <?xml version="1.0"?>
    <Product ProductID="123" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="Product.xsd">
       <ProductName>Rugby jersey</ProductName>
    </Product>
    					
  5. 将修改后的 XML 文档保存为 ProductWithXSD.xml。
使用 XSD 架构验证 XML 文档
  1. 修改您的应用程序,以便 XmlTextReader 加载 ProductWithXSD.xml,如下所示:
    XmlTextReader r = new XmlTextReader("C://MyFolder//ProductWithXSD.xml");
    					
  2. ValidationType 设 架构 中,以便验证读取器执行 XSD 架构验证:
    v.ValidationType = ValidationType.Schema;
    					
  3. 生成并运行应用程序以使用 XSD 架构验证 XML 文档。

使用 XSD 架构中的命名空间

  1. 在 Visual Studio.net 中,打开 ProductWithXSD.xml。
  2. 声明默认命名空间 urn: MyNamespace 文档中。此外,修改 XSD 链接,以便它指定 XSD 架构来验证此命名空间中的内容:
    <?xml version="1.0"?>
    <Product ProductID="123" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="urn:MyNamespace"
             xsi:schemaLocation="urn:MyNamespace Product.xsd">
       <ProductName>Rugby jersey</ProductName>
    </Product>
    					
  3. 将所做的更改保存到 ProductWithXSD.xml。
  4. 打开 Product.xsd。因此,架构应用于命名空间,如下所示修改 <xsd:schema> 开始标记urn: MyNamespace
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                targetNamespace="urn:MyNamespace"
                elementFormDefault="qualified">
    					
  5. 将所做的更改保存到 Product.xsd。
  6. 生成并运行应用程序以使用 XSD 架构验证 XML 文档。

缓存命名空间

  1. 在 Visual Studio.net 中,打开 Class1.cs。Main 方法的开始处创建XmlSchemaCollection 对象,如下所示:
    XmlSchemaCollection cache = new XmlSchemaCollection();
    					
  2. XmlSchemaCollection 对象允许您在内存中缓存架构以提高性能。每个架构都与一个不同的命名空间相关联。将下面的代码添加到缓存 Product.xsd:
    cache.Add("urn:MyNamespace", "C://MyFolder//Product.xsd");
    					
  3. 将以下语句创建要添加到 XmlValidatingReader 的架构缓存,以便读者可以使用内存中架构XmlValidatingReader 对象的代码的后面添加:
    v.Schemas.Add(cache);
    					

验证它工作的

  1. 生成,然后运行该应用程序。
  2. 验证 XML 文档仍验证 XSD 架构。
  3. 修改 ProductWithXSD.xml 以使它无效。
  4. 验证应用程序检测到这些验证错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值