如何: 验证针对 Visual Basic.net 中的 xml 架构的 XML 片段

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 317463
本文已归档。它按“原样”提供,并且不再更新。
在这篇文章中引用下列.net 框架类库命名空间: System.XML 为这篇文章的一个 Microsoft Visual C#.net 版本,请参阅 318504

本任务中

概要
本分步指南介绍了如何使用 XmlValidatingReaderXMLSchemaCollection 对象来验证对 XML 架构的可扩展标记语言 (XML) 碎片。

XmlValidatingReader 实现 XmlReader 类,并提供对 XML 数据验证的支持。XmlValidatingReader架构 属性将读取器连接到在一个 XmlSchemaCollection 中缓存的架构文件。XmlValidatingReaderValidationType 属性指定读者应执行的验证的类型。如果将该属性设置为 ValidationType.None,您将创建一个 nonvalidating 读取器。

您只能将 XML 架构定义语言 (XSD) 架构和 XML 数据缩减 (XDR) 架构添加到 XmlSchemaCollection。加载架构命名空间 URI 与使用 Add 方法。XML 架构的典型的命名空间 URI 是 targetNamespace 属性架构。

back to the top

要求

下面的列表概述了建议的硬件、 软件、 网络的基础结构和服务包,您需要:
  • Microsoft Visual Studio.net 兼容的 Microsoft Windows 操作系统上安装
本文假定您熟悉下列主题:
  • Visual.net Basic
  • 基本 XML 标准
  • XSD 架构
back to the top

创建一个 XSD 架构

将以下代码粘贴到新的文本文件名为 C:\Books.xsd:
<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:element name="comment" type="xsd:string" />	<xsd:element name="author" type="authorName"/>	<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:complexType name="bookstoreType">		<xsd:sequence maxOccurs="unbounded">			<xsd:element name="book" type="bookType" />			<xsd:element ref="comment" minOccurs="0" />		</xsd:sequence>	</xsd:complexType>	<xsd:complexType name="bookType">		<xsd:sequence>			<xsd:element name="title" type="xsd:string" />			<xsd:element ref="author" />			<xsd:element name="price" type="xsd:decimal" />		</xsd:sequence>		<xsd:attribute name="genre" type="xsd:string" />	</xsd:complexType>	</xsd:schema>				
back to the top

创建 Visual Basic.net 应用程序

  1. 创建新的 Visual Basic.net Windows 应用程序。
  2. 拖到 Form1 的 Button1。将以下代码粘贴到 类 Form1 中添加一个私有成员变量:
    Dim m_success As Boolean					
  3. 粘贴下列的 sub 过程,以创建 XMLValidatingReader 对象中的验证错误的 ValidationEventHandler
    Public Sub ValidationEventHandle(ByVal sender As Object, ByVal args As ValidationEventArgs)        m_success = False        Console.WriteLine((ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message))    End Sub 'ValidationEventHandle						
    : 您必须包括一个事件处理程序,以接收有关验证错误的信息在该数据类型定义 (DTD),在 XML 数据缩减 (XDR) 架构,和 XML 架构定义语言 (XSD) 架构。该事件处理程序接收 ValidationEventArgs 包含与此事件相关的数据类型的参数。

    回调处理程序可以使用 ValidationEventArgs.Severity 属性,以保证根据架构验证 XML 实例文档。严重性 属性使您能够区分验证错误 (严重性 等于 XmlSeverityType.Error) 表示一个致命错误和 $ 验证警告 (严重性 等于 XmlSeverityType.Warning) 表示没有架构信息可用。
  4. 将以下代码粘贴到 Button1_Click 事件过程中:
            Dim reader As XmlValidatingReader = Nothing        Dim myschema As New XmlSchemaCollection()        Try            'Create the XML fragment to be parsed.            Dim xmlFrag As String = "<author  xmlns='urn:bookstore-schema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" & _                            "<first-name>Herman</first-name>" & _                           "<last-name>Melville</last-name>" & _                         "</author>"            'Create the XmlParserContext.            Dim context As New XmlParserContext(Nothing, Nothing, "", XmlSpace.None)                       'Implement the reader.             reader = New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)            'Add the schema.            myschema.Add("urn:bookstore-schema", "Books.xsd")            'Set the schema type and add the schema to the reader.            reader.ValidationType = ValidationType.Schema            reader.Schemas.Add(myschema)            'Add the handler to raise the validation event.            AddHandler reader.ValidationEventHandler, AddressOf Me.ValidationEventHandle            While reader.Read            End While            Console.WriteLine("Completed validating xmlfragment")        Catch XmlExp As XmlException            Console.WriteLine(XmlExp.Message)        Catch XmlSchExp As XmlSchemaException            Console.WriteLine(XmlSchExp.Message)        Catch GenExp As Exception            Console.WriteLine(GenExp.Message)        End Try    End Sub					
  5. 当在输出窗口中显示以下消息时,XML 片段是一个有效的元素:
    Completed validating xmlfragment					
XMLValidatingReader 对象验证只有类型声明和 XML 架构中的顶层元素。如子元素的 XML 碎片都是本地的。不能将传递 XML 片段给 XmlValidatingReader 直接验证除非声明 XML 片断,作为顶级元素,并将引用设置所需的级别。

back to the top
参考
有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
307379如何: 在 Visual C#.net 中使用 DTD、 XDR,或 XSD 验证 XML 文档
313826指南信息:.net 框架中的 XML 架构
313651指南信息:.net 框架中的 XML
有关更多的信息,请参阅以下 MSDN 网站:back to the top

警告:本文已自动翻译

属性

文章 ID:317463 - 上次审阅时间:12/07/2015 08:53:32 - 修订版本: 2.2

Microsoft Visual Basic .NET 2003 标准版, Microsoft Visual .NET 2002 标准版, Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0

  • kbnosurvey kbarchive kbmt kbhowtomaster KB317463 KbMtzh
反馈