Поделиться через


Проверка по 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

Другие ресурсы

Использование класса XmlReader