HOW TO:使用 Visual C# .NET 的 DTD、XDR 或 XSD 來驗證 XML 文件

文章翻譯 文章翻譯
文章編號: 307379 - 檢視此文章適用的產品。
本文曾發行於 CHT307379
全部展開 | 全部摺疊

在此頁中

結論

本文示範了如何將文件類型定義 (DTD,Document Type DefinitionD)、Microsoft XML-Data Reduced (XDR) 結構描述、或 XML 結構描述定義語言 (XSD) 結構描述套用到可延伸標記語言 (XML) 文件上。本文也將告訴您如何使用 XmlValidatingReader 類別來驗證 XML 文件的指定文法,並告訴您如何使用 XmlSchemaCollection 來快取記憶體中的結構描述,以便將 XML 驗證最佳化。

XML 文件含有元素與屬性。它們提供了強力且有彈性的方式,在應用程式與組織之間交換資料。如果要指定 XML 文件允許的結構與內容,您可以撰寫 DTD、XDR 結構描述,或是 XSD 結構描述。在 Microsoft .NET Framework 下,利用 XSD 結構描述來指定 XML 文法是較好的選擇,但它也支援 DTD 及 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. 將這個檔案以 Product.dtd 的名稱儲存到 C:\MyFolder 目錄內。
  4. 在 Visual Studio .NET 中開啟 Product.xml。
  5. 將以下的 DOCTYPE 陳述式加到 Product.xml 頂端,以便將 XML 文件連結到 DTD 檔:
    <?xml version='1.0' encoding='utf-16'?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
  6. 將修改過的 XML 文件存成 ProductWithDTD.xml。

使用 DTD 來驗證 XML 文件

  1. 在 Visual Studio .NET 中新建一個名為 ValidateXml 的 Visual C# Console Application 專案。
  2. 在 Class1.cs 開頭新增兩個 using 陳述式,如下:
    using System.Xml;        // for XmlTextReader and XmlValidatingReader
    using System.Xml.Schema; // for XmlSchemaCollection (which is used later)
  3. 在 Class1.cs 中,於 Main 方法開頭之前,宣告一個名為 isValid 的布林欄位,如下:
    private static bool isValid = true;      // If a validation error occurs,
                                             // set this flag to false in the
                                             // validation event handler.
  4. Main 方法中建立一個 XmlTextReader 物件來從文字檔中讀取 XML 文件,然後再建立一個 XmlValidatingReader 來驗證這個 XML 資料,如下:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");
    XmlValidatingReader v = new XmlValidatingReader(r);
  5. XmlValidatingReader 物件的 ValidationType 屬性指出所需的驗證類型 (DTDXDR,或結構描述)。請將此屬性設為 DTD ,如下:
    v.ValidationType = ValidationType.DTD;
  6. 若有任何驗證錯誤發生,驗證讀取器會產生一個驗證事件。請加入以下程式碼,以註冊一個驗證事件處理常式 (您會在步驟 8 中實作 MyValidationEventHandler 方法):
    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>Rugby jersey</ProductName>」元素)。
  11. 再執行一次此應用程式。您應該會收到如下的錯誤訊息:
    Validation event
    Element 'Product' has invalid content. Expected 'ProductName'.
    An error occurred at file:///C:/MyFolder/ProductWithDTD.xml(4, 5).
    Document is invalid

使用 XDR 結構描述

建立 XDR 結構描述,然後連結到 XML 文件

  1. 在 Visual Studio .NET 中建立一個空白文字檔。
  2. 在檔案中加入以下 XDR 結構描述定義,以描述 XML 文件的文法:
    <?xml version='1.0' encoding='utf-16'?>
    <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. 將此檔案以 Product.xdr 的名稱存到 C:\MyFolder 目錄內。
  4. 開啟原始的 Product.xml 檔並將其連結到 XDR 結構描述,如下:
    <?xml version='1.0' encoding='utf-16'?>
    <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. ValidationType 設為 XDR ,讓驗證讀取器執行 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' encoding='utf-16'?>
    <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. 將此檔案以 Product.xsd 的名稱存到 C:\MyFolder 目錄內。
  4. 開啟原始的 Product.xml 檔並將其連結到 XSD 結構描述,如下:
    <?xml version='1.0' encoding='utf-16'?>
    <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 設為 Schema ,讓驗證讀取器執行 XSD 結構描述驗證:
    v.ValidationType = ValidationType.Schema;
  3. 建置並執行應用程式,以使用 XSD 結構描述驗證 XML 文件。

在 XSD 結構描述中使用名稱區

  1. 在 Visual Studio .NET 中開啟 ProductWithXSD.xml。
  2. 在文件中宣告預設名稱區 urn:MyNamespace 。此外,也請修改 XSD 連結,使它指定 XSD 結構描述來驗證此名稱區的內容:
    <?xml version='1.0' encoding='utf-16'?>
    <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. 對 XSD 結構描述驗證 XML 文件是否仍然有效。
  3. 修改 ProductWithXSD.xml,使其成為無效的文件。
  4. 驗證應用程式是否能偵測出這些驗證錯誤。

?考

本文件是根據 Microsoft Knowledge Base 文件編號 Q307379 翻譯的。若要參考原始英文文件內容,請至以下網址:

http://support.microsoft.com/support/kb/articles/Q307/3/79.asp

屬性

文章編號: 307379 - 上次校閱: 2002年2月18日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbhowto kbhowtomaster KB307379
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