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

文章翻译 文章翻译
文章编号: 317463 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

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

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

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

要求

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

创建一个 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>
				

创建 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 片断,作为顶级元素,并将引用设置所需的级别。

参考

有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
307379如何: 在 Visual C#.net 中使用 DTD、 XDR,或 XSD 验证 XML 文档
313826指南信息:.net 框架中的 XML 架构
313651指南信息:.net 框架中的 XML
有关更多的信息,请参阅以下 MSDN 网站:
System.Xml 命名空间
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxml.asp

XML Web 服务
http://msdn.microsoft.com/xml

属性

文章编号: 317463 - 最后修改: 2003年9月3日 - 修订: 2.2
这篇文章中的信息适用于:
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
关键字:?
kbmt kbhowtomaster KB317463 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 317463
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com