如何: 驗證針對 Visual Basic.NET 中的 XML 結構描述的 XML 片段

文章翻譯 文章翻譯
文章編號: 317463 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您,如何使用 XmlValidatingReaderXMLSchemaCollection 物件來驗證對 XML 結構描述的 「 可延伸標記語言 」 (XML) 片段。

XmlValidatingReader 實作 XmlReader 類別,並提供 XML 資料驗證的支援。XmlValidatingReader] 的 [結構描述] 屬性會將讀取器連接到在 XmlSchemaCollection 中快取的結構描述檔案。XmlValidatingReaderValidationType 屬性指定之讀取器應執行的驗證類型。如果您將屬性設定為 ValidationType.None 時,您會建立 nonvalidating 讀取器。

您只可以將 XML 結構描述定義語言 (XSD) 結構描述與 XML 資料精簡 (XDR) 結構描述加入 XmlSchemaCollection。使用 Add 方法與命名空間 URI,載入結構描述。為 XML 結構描述典型的命名空間 URI 會是結構描述的 targetNamespace 屬性。

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Visual Studio.NET] 安裝在相容的 Microsoft Windows 作業系統上
本文假設您已熟悉下列主題:
  • Visual Basic.NET
  • 基本 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 Framework 中的 XML 結構描述的資訊: 藍圖
313651XML 在.NET Framework 中的資訊: 藍圖
如需詳細資訊,請參閱下列 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 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
關鍵字:?
kbmt kbhowtomaster KB317463 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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