XmlValidatingReader Конструкторы

Определение

Инициализирует новый экземпляр класса XmlValidatingReader.

Перегрузки

XmlValidatingReader(XmlReader)

Инициализирует новый экземпляр класса XmlValidatingReader, который служит для проверки содержимого, возвращаемого заданным XmlReader.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Инициализирует новый экземпляр класса XmlValidatingReader с использованием указанных значений.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Инициализирует новый экземпляр класса XmlValidatingReader с использованием указанных значений.

XmlValidatingReader(XmlReader)

Инициализирует новый экземпляр класса XmlValidatingReader, который служит для проверки содержимого, возвращаемого заданным XmlReader.

public:
 XmlValidatingReader(System::Xml::XmlReader ^ reader);
public XmlValidatingReader (System.Xml.XmlReader reader);
new System.Xml.XmlValidatingReader : System.Xml.XmlReader -> System.Xml.XmlValidatingReader
Public Sub New (reader As XmlReader)

Параметры

reader
XmlReader

XmlReader, из которого при проверке данных выполняется чтение. Текущая реализация поддерживает только XmlTextReader.

Исключения

Указанное средство чтения не является XmlTextReader.

Примеры

В следующем примере проверяется два документа.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;
public ref class Sample
{
private:
   static Boolean m_success = true;

public:
   Sample()
   {
      
      // Validate the document using an external XSD schema.  Validation should fail.
      Validate( "notValidXSD.xml" );
      
      // Validate the document using an inline XSD. Validation should succeed.
      Validate( "inlineXSD.xml" );
   }


private:

   // Display the validation error.
   void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ args )
   {
      m_success = false;
      Console::WriteLine( "\r\n\tValidation error: {0}", args->Message );
   }

   void Validate( String^ filename )
   {
      m_success = true;
      Console::WriteLine( "\r\n******" );
      Console::WriteLine( "Validating XML file {0}", filename );
      XmlTextReader^ txtreader = gcnew XmlTextReader( filename );
      XmlValidatingReader^ reader = gcnew XmlValidatingReader( txtreader );
      
      // Set the validation event handler
      reader->ValidationEventHandler += gcnew ValidationEventHandler( this, &Sample::ValidationCallBack );
      
      // Read XML data
      while ( reader->Read() )
      {}

      Console::WriteLine( "Validation finished. Validation {0}", (m_success == true ? (String^)"successful!" : "failed.") );
      
      // Close the reader.
      reader->Close();
   }

};

int main()
{
   Sample^ validation = gcnew Sample;
}

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

public class Sample
{

  private Boolean m_success = true;

  public Sample ()
  {
      //Validate the document using an external XSD schema.  Validation should fail.
      Validate("notValidXSD.xml");

      //Validate the document using an inline XSD. Validation should succeed.
      Validate("inlineXSD.xml");
  }

  public static void Main ()
  {
      Sample validation = new Sample();
  }

  private void Validate(String filename)
  {
      m_success = true;
      Console.WriteLine("\r\n******");
      Console.WriteLine("Validating XML file " + filename.ToString());
      XmlTextReader txtreader = new XmlTextReader (filename);
      XmlValidatingReader reader = new XmlValidatingReader (txtreader);

      // Set the validation event handler
      reader.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

      // Read XML data
      while (reader.Read()){}
      Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful!" : "failed."));

      //Close the reader.
      reader.Close();
  }

  //Display the validation error.
  private void ValidationCallBack (object sender, ValidationEventArgs args)
  {
     m_success = false;
     Console.WriteLine("\r\n\tValidation error: " + args.Message );
  }
}
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

public class Sample

  private m_success as Boolean = true

  public sub New ()
      'Validate the document using an external XSD schema.  Validation should fail.
      Validate("notValidXSD.xml") 

      'Validate the document using an inline XSD. Validation should succeed.
      Validate("inlineXSD.xml")
  end sub

  public shared sub Main ()
 
      Dim validation as Sample = new Sample()
  end sub

  private sub Validate(filename as String)

      m_success = true
      Console.WriteLine()
      Console.WriteLine("******")
      Console.WriteLine("Validating XML file " + filename.ToString())
      Dim txtreader as XmlTextReader = new XmlTextReader (filename)
      Dim reader as XmlValidatingReader = new XmlValidatingReader (txtreader)

      ' Set the validation event handler
      AddHandler reader.ValidationEventHandler, AddressOf ValidationCallBack

      ' Read XML data
      while (reader.Read())
      end while
      Console.WriteLine ("Validation finished. Validation {0}", IIf(m_success, "successful!", "failed."))

      'Close the reader.
      reader.Close()
  end sub

  'Display the validation error.
  Private sub ValidationCallBack (sender as object, args as ValidationEventArgs)

     m_success = false
     Console.WriteLine()
     Console.WriteLine("  Validation error: " + args.Message )
  end sub
end class

В примере используются следующие входные файлы:

notValidXSD.xml

<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="urn:bookstore-schema books.xsd">
  <book>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
  </book>
  <book genre="novel">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
</bookstore>

books.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:bookstore-schema"
    elementFormDefault="qualified"
    targetNamespace="urn:bookstore-schema">

 <xsd:element name="bookstore" type="bookstoreType"/>

 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="author" type="authorName"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="authorName">
  <xsd:sequence>
   <xsd:element name="first-name"  type="xsd:string"/>
   <xsd:element name="last-name" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

inlineXSD.xml

<store-data>
<!--Inline XSD schema-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="bookstore" type="bookstoreType"/>
 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>
</xsd:schema>
<!-- end of schema -->

<bookstore>
  <book genre="novel">
    <title>Pride And Prejudice</title>
    <price>19.95</price>
  </book>
</bookstore>
</store-data>

Комментарии

Примечание

Класс XmlValidatingReader устарел в платформа .NET Framework 2.0. Проверяющий XmlReader экземпляр можно создать с помощью XmlReaderSettings класса и Create метода. Дополнительные сведения см. в подразделе "Примечания" на справочной странице XmlReader.

Все узлы, возвращенные из данного объекта XmlReader , также возвращаются из этого проверяющего средства чтения, поэтому в процессе нет потери информации. Новые узлы, которые не возвращаются из базового средства чтения, могут быть добавлены этим средством чтения (например, атрибуты по умолчанию и дочерние элементы ссылки на сущность). Все свойства, заданные в заданном объекте XmlTextReader , также применяются к этому проверяющее средство чтения. Например, если предоставленное средство чтения имеет набор WhitespaceHandling.None, это проверяющее средство чтения также игнорирует пробелы.

Если для проверки требуются определения типов внешних документов (DTD) или схемы, XmlResolver свойство задает XmlResolver объект для разрешения внешних ресурсов.

См. также раздел

Применяется к

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Инициализирует новый экземпляр класса XmlValidatingReader с использованием указанных значений.

public:
 XmlValidatingReader(System::IO::Stream ^ xmlFragment, System::Xml::XmlNodeType fragType, System::Xml::XmlParserContext ^ context);
public XmlValidatingReader (System.IO.Stream xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);
new System.Xml.XmlValidatingReader : System.IO.Stream * System.Xml.XmlNodeType * System.Xml.XmlParserContext -> System.Xml.XmlValidatingReader
Public Sub New (xmlFragment As Stream, fragType As XmlNodeType, context As XmlParserContext)

Параметры

xmlFragment
Stream

Поток, содержащий анализируемый фрагмент XML.

fragType
XmlNodeType

Тип XmlNodeType фрагмента XML. Определяет содержимое фрагмента (см. таблицу ниже).

context
XmlParserContext

XmlParserContext, в котором анализируется фрагмент XML. Это включает в себя используемый класс XmlNameTable, кодировку, область пространства имен, текущий xml:lang и область xml:space.

Исключения

fragType не относится к одному из разрешенных типов узлов, перечисленных в таблице ниже.

Комментарии

Примечание

Класс XmlValidatingReader устарел в платформа .NET Framework 2.0. Проверяющий XmlReader экземпляр можно создать с помощью XmlReaderSettings класса и Create метода. Дополнительные сведения см. в подразделе "Примечания" на справочной странице XmlReader.

Этот конструктор анализирует заданную строку как фрагмент XML. Если фрагмент XML является элементом или атрибутом, можно обойти правила корневого уровня для хорошо сформированных XML-документов.

В следующей таблице перечислены допустимые значения и fragType способы синтаксического анализа каждого из разных типов узлов.

Тип узла XML Фрагмент может содержать
Элемент Любое допустимое содержимое элемента (например, любое сочетание элементов, комментариев, инструкций по обработке, cdata, текста и ссылок на сущности).
Атрибут Значение атрибута (часть внутри кавычек).
Документ Содержимое всего XML-документа; при этом применяются правила уровня документа.

Средство чтения использует следующие действия для определения кодирования потока:

  1. XmlParserContext.Encoding Проверяет свойство, чтобы определить кодировку.

  2. Encoding Если свойство имеет значениеnull, средство чтения проверяет наличие метки порядка байтов в начале потока.

  3. Encoding Если свойство имеет nullзначение и метка порядка байтов не найдена, средство чтения предполагает, что поток закодирован в UTF-8.

Если это средство чтения будет проверяться с помощью определения типа документа (DTD) (то есть ValidationType имеет значение ValidationType.DTD или ValidationType.Auto), XmlParserContext указанное в конструкторе, должно предоставить все необходимые сведения DocumentType.

Примечание

Невозможно проверить фрагмент с помощью DTD. По определению DTD требуется загрузить весь документ для проверки.

Если это средство чтения будет проверять с помощью схем XML-Data сокращенного (XDR) или языка XSD, используйте Schemas свойство, чтобы указать XmlSchemaCollection , что содержит схемы (т XmlParserContext . е. не требуется указывать сведения DocumentType).

См. также раздел

Применяется к

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Инициализирует новый экземпляр класса XmlValidatingReader с использованием указанных значений.

public:
 XmlValidatingReader(System::String ^ xmlFragment, System::Xml::XmlNodeType fragType, System::Xml::XmlParserContext ^ context);
public XmlValidatingReader (string xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);
new System.Xml.XmlValidatingReader : string * System.Xml.XmlNodeType * System.Xml.XmlParserContext -> System.Xml.XmlValidatingReader
Public Sub New (xmlFragment As String, fragType As XmlNodeType, context As XmlParserContext)

Параметры

xmlFragment
String

Строка, содержащая анализируемый фрагмент XML.

fragType
XmlNodeType

Тип XmlNodeType фрагмента XML. Также определяет содержимое строки фрагмента (см. таблицу ниже).

context
XmlParserContext

XmlParserContext, в котором анализируется фрагмент XML. Это включает в себя используемый класс NameTable, кодировку, область пространства имен, текущий xml:lang и область xml:space.

Исключения

fragType не относится к одному из разрешенных типов узлов, перечисленных в таблице ниже.

Примеры

В следующем примере считывается фрагмент XML. Он использует XmlParserContext и использует его XmlNamespaceManager для обработки сопоставления пространств имен.

using System;
using System.IO;
using System.Xml;

public class Sample
{
    public static void Main()
    {
        XmlTextReader reader = null;

        try
        {
            //Create the XML fragment to be parsed.
            string xmlFrag = "<book> " +
                            "<title>Pride And Prejudice</title>" +
                            "<bk:genre>novel</bk:genre>" +
                            "</book>";

            //Create the XmlNamespaceManager that is used to
            //look up namespace information.
            NameTable nt = new NameTable();
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
            nsmgr.AddNamespace("bk", "urn:sample");

            //Create the XmlParserContext.
            XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);

            //Implement the reader.
            reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context);

            //Parse the XML fragment.  If they exist, display the
            //prefix and namespace URI of each element.
            while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    if (string.IsNullOrEmpty(reader.Prefix))
                    {
                        Console.WriteLine("<{0}>", reader.LocalName);
                    }
                    else
                    {
                        Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName);
                        Console.WriteLine(" The namespace URI is " + reader.NamespaceURI);
                    }
                }
            }
        }

        finally
        {
            if (reader != null)
                reader.Close();
        }
    }
} // End class
Imports System.IO
Imports System.Xml

Public Class Sample

    Public Shared Sub Main()
        Dim reader As XmlTextReader = Nothing

        Try
            'Create the XML fragment to be parsed.
            Dim xmlFrag As String = "<book> " & _
                                    "<title>Pride And Prejudice</title>" & _
                                    "<bk:genre>novel</bk:genre>" & _
                                    "</book>"

            'Create the XmlNamespaceManager that is used to
            'look up namespace information.
            Dim nt As New NameTable()
            Dim nsmgr As New XmlNamespaceManager(nt)
            nsmgr.AddNamespace("bk", "urn:sample")

            'Create the XmlParserContext.
            Dim context As New XmlParserContext(Nothing, nsmgr, Nothing, XmlSpace.None)

            'Implement the reader. 
            reader = New XmlTextReader(xmlFrag, XmlNodeType.Element, context)

            'Parse the XML fragment.  If they exist, display the   
            'prefix and namespace URI of each element.
            While reader.Read()
                If reader.IsStartElement() Then
                    If reader.Prefix = String.Empty Then
                        Console.WriteLine("<{0}>", reader.LocalName)
                    Else
                        Console.Write("<{0}:{1}>", reader.Prefix, reader.LocalName)
                        Console.WriteLine(" The namespace URI is " & reader.NamespaceURI)
                    End If
                End If
            End While
        Finally
            If Not (reader Is Nothing) Then
                reader.Close()
            End If
        End Try
    End Sub
End Class

Комментарии

Примечание

Класс XmlValidatingReader устарел в платформа .NET Framework 2.0. Проверяющий XmlReader экземпляр можно создать с помощью XmlReaderSettings класса и Create метода. Дополнительные сведения см. в подразделе "Примечания" на справочной странице XmlReader.

Этот конструктор анализирует заданную строку как фрагмент XML. Если фрагмент XML является элементом или атрибутом, можно обойти правила корневого уровня для хорошо сформированных XML-документов. Этот конструктор может обрабатывать строки, возвращенные из ReadInnerXml.

В следующей таблице перечислены допустимые значения и fragType способы синтаксического анализа каждого из разных типов узлов.

Тип узла XML Фрагмент может содержать
Элемент Любое допустимое содержимое элемента (например, любое сочетание элементов, комментариев, инструкций по обработке, cdata, текста и ссылок на сущности).
Атрибут Значение атрибута (часть внутри кавычек).
Документ Содержимое всего XML-документа; при этом применяются правила уровня документа.

Если это средство чтения будет проверяться с помощью определения типа документа (DTD) (то есть ValidationType имеет значение ValidationType.DTD или ValidationType.Auto), XmlParserContext указанное в конструкторе, должно предоставить все необходимые сведения DocumentType.

Примечание

Проверить фрагмент с помощью DTD невозможно. По определению DTD требуется загрузить весь документ для проверки.

Если это средство чтения будет проверять с помощью схем XML-Data сокращенного (XDR) или языка XSD, используйте Schemas свойство, чтобы указать XmlSchemaCollection , что содержит схемы ( XmlParserContext не требуется указывать сведения DocumentType).

См. также раздел

Применяется к