XmlValidatingReader Constructores
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Inicializa una nueva instancia de la clase XmlValidatingReader
.
Sobrecargas
XmlValidatingReader(XmlReader) |
Inicializa una nueva instancia de la clase |
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext) |
Inicializa una nueva instancia de la clase |
XmlValidatingReader(String, XmlNodeType, XmlParserContext) |
Inicializa una nueva instancia de la clase |
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:
Comprueba la XmlParserContext.Encoding propiedad para determinar la codificación.
Si la
Encoding
propiedad esnull
, el lector comprueba si hay una marca de orden de bytes al principio de la secuencia.Si la
Encoding
propiedad esnull
y 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).