Compartir a través de


XmlValidatingReader Constructores

Definición

Inicializa una nueva instancia de la clase XmlValidatingReader.

Sobrecargas

XmlValidatingReader(XmlReader)

Inicializa una nueva instancia de la clase XmlValidatingReader que valida el contenido devuelto por el objeto XmlReader especificado.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicializa una nueva instancia de la clase XmlValidatingReader con los valores especificados.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicializa una nueva instancia de la clase XmlValidatingReader con los valores especificados.

XmlValidatingReader(XmlReader)

Inicializa una nueva instancia de la clase XmlValidatingReader que valida el contenido devuelto por el objeto XmlReader especificado.

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)

Parámetros

reader
XmlReader

XmlReader en el que se va a leer durante la validación. La implementación actual solo admite XmlTextReader.

Excepciones

El lector especificado no es XmlTextReader.

Ejemplos

En el ejemplo siguiente se validan dos documentos.

#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

En el ejemplo se usan los siguientes archivos 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>

Comentarios

Nota

La XmlValidatingReader clase está obsoleta en .NET Framework 2.0. Puede crear una instancia de XmlReader validación mediante la XmlReaderSettings clase y el Create método . Para obtener más información, vea la sección Comentarios de la página de referencia de XmlReader.

Todos los nodos devueltos por el especificado XmlReader también se devuelven de este lector de validación, por lo que no hay pérdida de información en el proceso. Este lector puede agregar nuevos nodos no devueltos del lector subyacente (por ejemplo, atributos predeterminados y elementos secundarios de una referencia de entidad). Las propiedades establecidas en el especificado XmlTextReader también se aplican a este lector de validación. Por ejemplo, si el lector proporcionado tenía establecido WhitespaceHandling.None, este lector de validación también omite el espacio en blanco.

Cuando se necesitan definiciones de tipo de documento (DTD) o esquemas externos para la validación, la XmlResolver propiedad establece el XmlResolver objeto que se va a usar para resolver recursos externos.

Consulte también

Se aplica a

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicializa una nueva instancia de la clase XmlValidatingReader con los valores especificados.

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)

Parámetros

xmlFragment
Stream

Flujo que contiene el fragmento de XML que se va a analizar.

fragType
XmlNodeType

XmlNodeType del fragmento de XML. Esto determina lo que puede contener el fragmento (vea la tabla que figura más abajo).

context
XmlParserContext

XmlParserContext en el que se analizará el fragmento de XML. Esto incluye el objeto XmlNameTable que se va a usar, la codificación, el ámbito de espacio de nombres, el xml:lang actual y el ámbito de xml:space.

Excepciones

fragType no es uno de los tipos de nodo que se enumeran en la tabla que figura más abajo.

Comentarios

Nota

La XmlValidatingReader clase está obsoleta en .NET Framework 2.0. Puede crear una instancia de XmlReader validación mediante la XmlReaderSettings clase y el Create método . Para obtener más información, vea la sección Comentarios de la página de referencia de XmlReader.

Este constructor analiza la cadena especificada como un fragmento de XML. Si el fragmento XML es un elemento o atributo, puede omitir las reglas de nivel raíz para documentos XML bien formados.

En la tabla siguiente se enumeran los valores válidos para fragType y cómo el lector analiza cada uno de los distintos tipos de nodo.

Tipo XmlNode El fragmento puede contener
Elemento Cualquier contenido de elemento válido (por ejemplo, cualquier combinación de elementos, comentarios, instrucciones de procesamiento, cdata, texto y referencias de entidad).
Atributo Valor de un atributo (la parte dentro de las comillas).
Documento Contenido de un documento XML completo; esto aplica reglas de nivel de documento.

El lector usa los pasos siguientes para determinar la codificación de la secuencia:

  1. Comprueba la XmlParserContext.Encoding propiedad para determinar la codificación.

  2. Si la Encoding propiedad es null, el lector comprueba si hay una marca de orden de bytes al principio de la secuencia.

  3. Si la Encoding propiedad es nully no se encuentra ninguna marca de orden de bytes, el lector asume que la secuencia está codificada en UTF-8.

Si este lector va a validar mediante la definición de tipo de documento (DTD) (es decir, ValidationType se establece en ValidationType.DTD o ValidationType.Auto), el XmlParserContext especificado en el constructor debe proporcionar toda la información de DocumentType necesaria.

Nota

No es posible validar un fragmento mediante un DTD. Por definición, un DTD requiere que se cargue un documento completo para la validación.

Si este lector va a validar mediante XML-Data esquemas reducidos (XDR) o lenguaje de definición de esquemas XML (XSD), use la Schemas propiedad para especificar que XmlSchemaCollection contiene los esquemas (es decir, no XmlParserContext es necesario proporcionar la información documentType).

Consulte también

Se aplica a

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicializa una nueva instancia de la clase XmlValidatingReader con los valores especificados.

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)

Parámetros

xmlFragment
String

Cadena que contiene el fragmento de XML que se va a analizar.

fragType
XmlNodeType

XmlNodeType del fragmento de XML. Esto determina también lo que puede contener la cadena del fragmento (vea la tabla que figura más abajo).

context
XmlParserContext

XmlParserContext en el que se analizará el fragmento de XML. Esto incluye el objeto NameTable que se va a usar, la codificación, el ámbito de espacio de nombres, el xml:lang actual y el ámbito de xml:space.

Excepciones

fragType no es uno de los tipos de nodo que se enumeran en la tabla que figura más abajo.

Ejemplos

En el ejemplo siguiente se lee un fragmento XML. Usa y XmlParserContext para XmlNamespaceManager controlar la coincidencia de espacios de nombres.

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

Comentarios

Nota

La XmlValidatingReader clase está obsoleta en .NET Framework 2.0. Puede crear una instancia de XmlReader validación mediante la XmlReaderSettings clase y el Create método . Para obtener más información, vea la sección Comentarios de la página de referencia de XmlReader.

Este constructor analiza la cadena especificada como un fragmento de XML. Si el fragmento XML es un elemento o atributo, puede omitir las reglas de nivel raíz para documentos XML bien formados. Este constructor puede controlar las cadenas devueltas desde ReadInnerXml.

En la tabla siguiente se enumeran los valores válidos para fragType y cómo el lector analiza cada uno de los distintos tipos de nodo.

Tipo XmlNode El fragmento puede contener
Elemento Cualquier contenido de elemento válido (por ejemplo, cualquier combinación de elementos, comentarios, instrucciones de procesamiento, cdata, texto y referencias de entidad).
Atributo Valor de un atributo (la parte dentro de las comillas).
Documento Contenido de un documento XML completo; esto aplica reglas de nivel de documento.

Si este lector se va a validar mediante la definición de tipo de documento (DTD) (es decir, ValidationType se establece en ValidationType.DTD o ValidationType.Auto), el XmlParserContext especificado en el constructor debe proporcionar toda la información de DocumentType necesaria.

Nota

No es posible validar un fragmento mediante DTD. Por definición, DTD requiere que se cargue un documento completo para la validación.

Si este lector va a validar mediante XML-Data esquemas reducidos (XDR) o lenguaje de definición de esquemas XML (XSD), use la Schemas propiedad para especificar que XmlSchemaCollection contiene los esquemas (no XmlParserContext es necesario proporcionar la información documentType).

Consulte también

Se aplica a