Проверка по DTD с помощью XmlValidatingReader
Проверка по определению типов документа (DTD) реализуется с помощью ограничений допустимости, определенных в документе «Рекомендации консорциума W3C по языку XML 1.0».В DTD используется формальная грамматика для описания структуры и синтаксиса совместимых XML-документов; они указывают содержимое и значения, разрешенные для XML-документа.
Для выполнения проверки по DTD объект XmlValidatingReader использует DTD, определенный в декларации DOCTYPE XML-документа.Декларация DOCTYPE может указывать на встроенный DTD или ссылаться на внешний DTD-файл.
Примечание
Класс XmlValidatingReader в версии .NET Framework 2.0 устарел.Экземпляр XmlReader для проверки можно создать с помощью класса XmlReaderSettings и метода Create.Дополнительные сведения см. в разделе Проверка XML-данных с помощью XmlReader.
Пример
Следующий пример кода создает 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">
См. также
Основные понятия
Чтение XML с помощью XmlReader