XmlValidatingReader Construtores
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Inicializa uma nova instância da classe XmlValidatingReader
.
XmlValidatingReader(XmlReader) |
Inicializa uma nova instância da classe |
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext) |
Inicializa uma nova instância da classe |
XmlValidatingReader(String, XmlNodeType, XmlParserContext) |
Inicializa uma nova instância da classe |
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);
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
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.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
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);
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
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:
Verifica a XmlParserContext.Encoding propriedade para determinar a codificação.
Se a
Encoding
propriedade fornull
, o leitor verificará uma marca de ordem de byte no início do fluxo.Se a
Encoding
propriedade fornull
, 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(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
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
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
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).