更新:November 2007
文档类型定义 (DTD) 验证使用在万维网联合会 (W3C) 可扩展标记语言 (XML) 1.0 建议中定义的有效性约束来实现。 DTD 使用形式语法来描述符合标准的 XML 文档的结构和语法;它们指定 XML 文档所允许的内容和值。
为针对 DTD 执行验证,XmlReader 使用 XML 文档的 DOCTYPE 声明中所定义的 DTD。 DOCTYPE 声明既可以指向内联 DTD,也可以是对外部 DTD 文件的引用。
- 将 XmlReaderSettings.ProhibitDtd 属性设置为 false。 
- 将 XmlReaderSettings.ValidationType 属性设置为 ValidationType.DTD。 
- 如果 DTD 是存储在要求进行身份验证的网络资源上的外部文件,请将具有必要凭据的 XmlResolver 对象传递给 Create 方法。 
示例
以下示例使用 DTD 文件验证 XML 文件。
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO
public class Sample 
  public shared sub Main() 
    ' Set the validation settings.
    Dim settings as XmlReaderSettings = new XmlReaderSettings()
    settings.ProhibitDtd = false
    settings.ValidationType = ValidationType.DTD
    AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
    ' Create the XmlReader object.
    Dim reader as XmlReader = XmlReader.Create("itemDTD.xml", settings)
    ' Parse the file. 
    while reader.Read()
    end while
  end sub
  ' Display any validation errors.
  private shared sub ValidationCallBack(sender as object, e as ValidationEventArgs) 
    Console.WriteLine("Validation Error: {0}", e.Message)
  end sub
end class
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
public class Sample {
  public static void Main() {
    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ProhibitDtd = false;
    settings.ValidationType = ValidationType.DTD;
    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("itemDTD.xml", settings);
    // Parse the file. 
    while (reader.Read());
  }
  // Display any validation errors.
  private static void ValidationCallBack(object sender, ValidationEventArgs e) {
    Console.WriteLine("Validation Error: {0}", e.Message);
  }
}
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::IO;
// Display any validation errors.
static void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ e )
{
   Console::WriteLine( L"Validation Error: {0}", e->Message );
}
int main()
{
   // Set the validation settings.
   XmlReaderSettings^ settings = gcnew XmlReaderSettings;
   settings->ProhibitDtd = false;
   settings->ValidationType = ValidationType::DTD;
   settings->ValidationEventHandler += gcnew ValidationEventHandler( ValidationCallBack );
   // Create the XmlReader object.
   XmlReader^ reader = XmlReader::Create( L"itemDTD.xml", settings );
   // Parse the file. 
   while ( reader->Read() )
      ;
   return 1;
}
输入
示例使用 itemDTD.xml 文件作为输入。
<!--XML file using a DTD-->
<!DOCTYPE store [
  <!ELEMENT store (item)*> 
  <!ELEMENT item (name,dept,price)>
  <!ATTLIST item type CDATA #REQUIRED>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT price (#PCDATA)>]>
<store>
  <item type="supplies"  ISBN="2-3631-4">
    <name>paint</name>
    <price>16.95</price>
  </item>
</store>