文档类型定义 (DTD) 验证使用在万维网联合会 (W3C) 可扩展标记语言 (XML) 1.0 建议中定义的有效性约束来实现。 DTD 使用形式语法来描述符合标准的 XML 文档的结构和语法;它们指定 XML 文档所允许的内容和值。
为根据 DTD 执行验证,XmlValidatingReader 使用 XML 文档的 DOCTYPE 声明中所定义的 DTD。 DOCTYPE 声明既可以指向内联 DTD,也可以是对外部 DTD 文件的引用。
![]() |
---|
XmlValidatingReader 类在 .NET Framework 2.0 版 中已过期。您可以使用 XmlReaderSettings 类和 Create 方法创建一个验证 XmlReader 实例。有关更多信息,请参见使用 XmlReader 验证 XML 数据。 |
示例
下面的代码示例创建一个接受 XmlTextReader 的 XmlValidatingReader。 根据外部 DTD 文件 HeadCount.dtd 对输入文件 HeadCount.xml 进行验证。 将显示所有严重程度类型和错误消息。
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">