XmlValidatingReader Construtores

Definição

Inicializa uma nova instância da classe XmlValidatingReader.

Sobrecargas

XmlValidatingReader(XmlReader)

Inicializa uma nova instância da classe XmlValidatingReader que valida o conteúdo retornado do XmlReader fornecido.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicializa uma nova instância da classe XmlValidatingReader com os valores especificados.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicializa uma nova instância da classe XmlValidatingReader com os valores especificados.

XmlValidatingReader(XmlReader)

Inicializa uma nova instância da classe XmlValidatingReader que valida o conteúdo retornado do XmlReader fornecido.

public XmlValidatingReader (System.Xml.XmlReader reader);

Parâmetros

reader
XmlReader

O XmlReader a ler lido durante a validação. A implementação atual dá suporte somente a XmlTextReader.

Exceções

O leitor especificado não é um XmlTextReader.

Exemplos

O exemplo a seguir valida dois documentos.

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 );
  }
}

O exemplo usa os seguintes arquivos de entrada:

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>

Comentários

Observação

A XmlValidatingReader classe está obsoleta no .NET Framework 2.0. Você pode criar uma instância de validação XmlReader usando a XmlReaderSettings classe e o Create método. Para obter mais informações, consulte a seção de Comentários da página de referência XmlReader.

Todos os nós retornados do determinado XmlReader também são retornados desse leitor de validação, portanto, não há perda de informações no processo. Novos nós não retornados do leitor subjacente podem ser adicionados por esse leitor (por exemplo, atributos padrão e filhos de uma referência de entidade). Todas as propriedades definidas no determinado XmlTextReader também se aplicam a esse leitor de validação. Por exemplo, se o leitor fornecido tiver WhitespaceHandling.None definido, esse leitor de validação também ignorará o espaço em branco.

Quando DTDs (definições de tipo de documento) externas ou esquemas são necessários para validação, a XmlResolver propriedade define o XmlResolver objeto a ser usado para resolver recursos externos.

Confira também

Aplica-se a

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicializa uma nova instância da classe XmlValidatingReader com os valores especificados.

public XmlValidatingReader (System.IO.Stream xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);

Parâmetros

xmlFragment
Stream

O fluxo que contém o fragmento XML a ser analisado.

fragType
XmlNodeType

O XmlNodeType do fragmento XML. Isso determina o que o fragmento pode conter (consulte a tabela abaixo).

context
XmlParserContext

O XmlParserContext no qual o fragmento XML deverá ser analisado. Isso inclui o XmlNameTable a ser usado, codificação, o escopo de namespace, xml:lang atual e o escopo xml:space.

Exceções

fragType não é um dos tipos de nó listados na tabela a seguir.

Comentários

Observação

A XmlValidatingReader classe está obsoleta no .NET Framework 2.0. Você pode criar uma instância de validação XmlReader usando a XmlReaderSettings classe e o Create método. Para obter mais informações, consulte a seção de Comentários da página de referência XmlReader.

Esse construtor analisa a cadeia de caracteres fornecida como um fragmento de XML. Se o fragmento XML for um elemento ou atributo, você poderá ignorar as regras de nível raiz para documentos XML bem formados.

A tabela a seguir lista valores válidos e como fragType o leitor analisa cada um dos diferentes tipos de nó.

XmlNodeType Fragmento pode conter
Elemento Qualquer conteúdo de elemento válido (por exemplo, qualquer combinação de elementos, comentários, instruções de processamento, cdata, texto e referências de entidade).
Atributo O valor de um atributo (a parte dentro das aspas).
Documento O conteúdo de um documento XML inteiro; isso impõe regras de nível de documento.

O leitor usa as seguintes etapas para determinar a codificação do fluxo:

  1. Verifica a XmlParserContext.Encoding propriedade para determinar a codificação.

  2. Se a Encoding propriedade for null, o leitor verificará uma marca de ordem de byte no início do fluxo.

  3. Se a Encoding propriedade for null, e nenhuma marca de ordem de byte for encontrada, o leitor assumirá que o fluxo está codificado em UTF-8.

Se esse leitor estiver validando usando dTD (definição de tipo de documento) (ou seja, ValidationType está definido como ValidationType.DTD ou ValidationType.Auto), o XmlParserContext especificado no construtor deve fornecer todas as informações necessárias do DocumentType.

Observação

Não é possível validar um fragmento usando um DTD. Por definição, um DTD requer que um documento inteiro seja carregado para validação.

Se esse leitor estiver validando usando esquemas de XDR (linguagem de definição de esquema XML) ou XDR (redução de XML-Data), use a Schemas propriedade para especificar o XmlSchemaCollection que contém os esquemas (ou seja, XmlParserContext não é necessário fornecer as informações do DocumentType).

Confira também

Aplica-se a

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicializa uma nova instância da classe XmlValidatingReader com os valores especificados.

public XmlValidatingReader (string xmlFragment, System.Xml.XmlNodeType fragType, System.Xml.XmlParserContext context);

Parâmetros

xmlFragment
String

A cadeia de caracteres que contém o fragmento XML a ser analisado.

fragType
XmlNodeType

O XmlNodeType do fragmento XML. Ele também determina o que a cadeia de caracteres de fragmento pode conter (consulte a tabela abaixo).

context
XmlParserContext

O XmlParserContext no qual o fragmento XML deverá ser analisado. Isso inclui o NameTable a ser usado, codificação, o escopo de namespace, xml:lang atual e o escopo xml:space.

Exceções

fragType não é um dos tipos de nó listados na tabela a seguir.

Exemplos

O exemplo a seguir lê um fragmento XML. Ele usa um XmlParserContext e seu XmlNamespaceManager para manipular a correspondência de namespace.

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

Comentários

Observação

A XmlValidatingReader classe está obsoleta no .NET Framework 2.0. Você pode criar uma instância de validação XmlReader usando a XmlReaderSettings classe e o Create método. Para obter mais informações, consulte a seção de Comentários da página de referência XmlReader.

Esse construtor analisa a cadeia de caracteres fornecida como um fragmento de XML. Se o fragmento XML for um elemento ou atributo, você poderá ignorar as regras de nível raiz para documentos XML bem formados. Esse construtor pode manipular cadeias de caracteres retornadas de ReadInnerXml.

A tabela a seguir lista valores válidos e como fragType o leitor analisa cada um dos diferentes tipos de nó.

XmlNodeType Fragmento pode conter
Elemento Qualquer conteúdo de elemento válido (por exemplo, qualquer combinação de elementos, comentários, instruções de processamento, cdata, texto e referências de entidade).
Atributo O valor de um atributo (a parte dentro das aspas).
Documento O conteúdo de um documento XML inteiro; isso impõe regras de nível de documento.

Se esse leitor for validado usando dtd (definição de tipo de documento) (ou seja, ValidationType está definido como ValidationType.DTD ou ValidationType.Auto), o XmlParserContext especificado no construtor deve fornecer todas as informações necessárias do DocumentType.

Observação

Não é possível validar um fragmento usando DTD. Por definição, o DTD requer que um documento inteiro seja carregado para validação.

Se esse leitor for validado usando esquemas de XDR (linguagem de definição de esquema XML) ou XDR (XML-Data reduzida), use a Schemas propriedade para especificar o XmlSchemaCollection que contém os esquemas (não XmlParserContext é necessário fornecer as informações do DocumentType).

Confira também

Aplica-se a