使用 XmlValidatingReader 對 DTD 進行驗證
文件類型定義 (DTD) 驗證是使用全球資訊網協會 (W3C) 可延伸標記語言 (XML) 1.0 版建議事項中定義的有效性條件約束實作的。DTD 使用正式文法描述相容 XML 文件的結構和語法;它們指定可用於 XML 文件的內容和值。
XmlValidatingReader 會使用 XML 文件之 DOCTYPE
宣告中所定義的 DTD,以根據 DTD 執行驗證。DOCTYPE
宣告可以指向內嵌 DTD,也可以是外部 DTD 檔案的參考。
注意事項 |
---|
XmlValidatingReader 類別在 Microsoft .NET Framework 2.0 版本 中已過時。您可以使用 XmlReaderSettings 類別和 Create 方法,來建立驗證 XmlReader 執行個體。如需詳細資訊,請參閱使用 XmlReader 驗證 XML 資料。 |
範例
下列程式碼範例會建立 XmlValidatingReader,其會使用 XmlTextReader。輸入檔 HeadCount.xml 是針對外部 DTD 檔案 HeadCount.dtd 來驗證。範例中會顯示任何嚴重性類型和錯誤訊息。
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
public class ValidationSample
public shared sub Main()
Dim tr As XmlTextReader = new XmlTextReader("HeadCount.xml")
Dim vr As XmlValidatingReader = new XmlValidatingReader(tr)
vr.ValidationType = ValidationType.DTD
AddHandler vr.ValidationEventHandler, AddressOf ValidationCallback
while(vr.Read())
end while
Console.WriteLine("Validation finished")
end sub
public shared sub ValidationCallBack (sender As object, args As ValidationEventArgs)
Console.WriteLine("***Validation error")
Console.WriteLine("Severity:{0}", args.Severity)
Console.WriteLine("Message:{0}", args.Message)
end sub
end class
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
namespace ValidationSample
{
class Sample
{
public static void Main()
{
XmlTextReader tr = new XmlTextReader("HeadCount.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.ValidationType = ValidationType.DTD;
vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);
while(vr.Read());
Console.WriteLine("Validation finished");
}
public static void ValidationHandler(object sender, ValidationEventArgs args)
{
Console.WriteLine("***Validation error");
Console.WriteLine("\tSeverity:{0}", args.Severity);
Console.WriteLine("\tMessage :{0}", args.Message);
}
}
}
以下列出了要進行驗證的輸入檔 (HeadCount.xml) 內容。
<!DOCTYPE HeadCount SYSTEM "HeadCount.dtd">
<HeadCount>
<Name First="Waldo" Last="Pepper">
<Name First="Salt" Last="Pepper" Relation="spouse"/>
<Name First="Red" Last="Pepper" Relation="child"/>
</Name>
<Name First="&MyFirst;" Last="&MyLast;">
<Name First="Sharon" Last="&MyLast;" Relation="spouse"/>
<Name First="Morgan" Last="&MyLast;" Relation="child"/>
<Name First="Shelby" Last="&MyLast;" Relation="child"/>
</Name>
</HeadCount>
以下描述據以驗證的外部 DTD 檔案 HeadCount.dtd 的內容。
<!ELEMENT HeadCount (Name)*>
<!ELEMENT Name (Name)*>
<!ATTLIST Name First CDATA #REQUIRED>
<!ATTLIST Name Last CDATA #REQUIRED>
<!ATTLIST Name Relation (self | spouse | child) "self">
<!ENTITY MyFirst "Jeff">
<!ENTITY MyLast "Smith">