XmlValidatingReader Constructeurs
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Initialise une nouvelle instance de la classe XmlValidatingReader
.
Surcharges
XmlValidatingReader(XmlReader) |
Initialise une nouvelle instance de la classe |
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext) |
Initialise une nouvelle instance de la classe |
XmlValidatingReader(String, XmlNodeType, XmlParserContext) |
Initialise une nouvelle instance de la classe |
XmlValidatingReader(XmlReader)
Initialise une nouvelle instance de la classe XmlValidatingReader
qui valide le contenu retourné à partir du XmlReader en question.
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)
Paramètres
- reader
- XmlReader
XmlReader
à lire au moment de la validation. L'implémentation actuelle ne prend en charge que XmlTextReader.
Exceptions
Le lecteur spécifié n'est pas XmlTextReader
.
Exemples
L’exemple suivant valide deux documents.
#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
L’exemple utilise les fichiers d’entrée suivants :
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>
Remarques
Notes
La XmlValidatingReader classe est obsolète dans .NET Framework 2.0. Vous pouvez créer une instance de validation à l’aide de XmlReader la XmlReaderSettings classe et de la Create méthode. Pour plus d'informations, consultez la section Notes de la page de référence XmlReader.
Tous les nœuds retournés à partir de l’élément donné XmlReader
sont également retournés par ce lecteur de validation. Il n’y a donc aucune perte d’informations dans le processus. De nouveaux nœuds non retournés par le lecteur sous-jacent peuvent être ajoutés par ce lecteur (par exemple, les attributs par défaut et les enfants d’une référence d’entité). Toutes les propriétés définies sur l’élément donné XmlTextReader
s’appliquent également à ce lecteur de validation. Par exemple, si le lecteur fourni avait whitespaceHandling.None défini, ce lecteur de validation ignore également l’espace blanc.
Lorsque des définitions de type de document externe (DTD) ou des schémas sont nécessaires pour la validation, la propriété définit l’objet XmlResolver XmlResolver à utiliser pour résoudre les ressources externes.
Voir aussi
S’applique à
XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)
Initialise une nouvelle instance de la classe XmlValidatingReader
avec les valeurs spécifiées.
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)
Paramètres
- xmlFragment
- Stream
Flux contenant le fragment XML à analyser.
- fragType
- XmlNodeType
XmlNodeType du fragment XML. Ceci détermine ce que le fragment peut contenir (consultez le tableau ci-dessous).
- context
- XmlParserContext
XmlParserContext dans lequel le fragment XML doit être analysé. Ceci inclut le XmlNameTable à utiliser, l'encodage, la portée de l'espace de noms, le xml:lang
actuel et la portée de xml:space
.
Exceptions
fragType
ne fait pas partie des types de nœuds répertoriés dans le tableau ci-dessous.
Remarques
Notes
La XmlValidatingReader classe est obsolète dans .NET Framework 2.0. Vous pouvez créer une instance de validation à l’aide de XmlReader la XmlReaderSettings classe et de la Create méthode. Pour plus d'informations, consultez la section Notes de la page de référence XmlReader.
Ce constructeur analyse la chaîne donnée en tant que fragment de XML. Si le fragment XML est un élément ou un attribut, vous pouvez contourner les règles de niveau racine pour les documents XML bien formés.
Le tableau suivant répertorie les valeurs valides pour fragType
et la façon dont le lecteur analyse chacun des différents types de nœuds.
XmlNodeType | Fragment peut contenir |
---|---|
Élément | Tout contenu d’élément valide (par exemple, toute combinaison d’éléments, commentaires, instructions de traitement, cdata, texte et références d’entité). |
Attribut | Valeur d’un attribut (partie à l’intérieur des guillemets). |
Document | Contenu d’un document XML entier ; cela applique des règles de niveau document. |
Le lecteur utilise les étapes suivantes pour déterminer l’encodage du flux :
Vérifie la propriété pour déterminer l’encodage XmlParserContext.Encoding .
Si la propriété est
null
, leEncoding
lecteur recherche une marque d’ordre d’octet au début du flux.Si la
Encoding
propriété estnull
, et qu’aucune marque d’ordre d’octet n’est trouvée, le lecteur suppose que le flux est encodé dans UTF-8.
Si ce lecteur valide à l’aide de la définition de type de document (DTD) (autrement dit, ValidationType est défini sur ValidationType.DTD ou ValidationType.Auto), le XmlParserContext
constructeur doit fournir toutes les informations DocumentType nécessaires.
Notes
Il n’est pas possible de valider un fragment à l’aide d’un DTD. Par définition, une DTD nécessite qu’un document entier soit chargé pour la validation.
Si ce lecteur valide en utilisant XML-Data des schémas XDR (Réduits) ou XML Schema Definition Language (XSD), utilisez la Schemas propriété pour spécifier les XmlSchemaCollection schémas (autrement dit, il XmlParserContext
n’est pas nécessaire de fournir les informations DocumentType).
Voir aussi
S’applique à
XmlValidatingReader(String, XmlNodeType, XmlParserContext)
Initialise une nouvelle instance de la classe XmlValidatingReader
avec les valeurs spécifiées.
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)
Paramètres
- xmlFragment
- String
Chaîne contenant le fragment XML à analyser.
- fragType
- XmlNodeType
XmlNodeType du fragment XML. Ceci détermine également ce que la chaîne du fragment peut contenir (consultez le tableau ci-dessous).
- context
- XmlParserContext
XmlParserContext dans lequel le fragment XML doit être analysé. Ceci inclut le NameTable à utiliser, l'encodage, la portée de l'espace de noms, le xml:lang actuel et la portée de xml:space.
Exceptions
fragType
ne fait pas partie des types de nœuds répertoriés dans le tableau ci-dessous.
Exemples
L’exemple suivant lit un fragment XML. Il utilise un XmlParserContext
et son pour gérer la XmlNamespaceManager correspondance d’espace de noms.
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
Remarques
Notes
La XmlValidatingReader classe est obsolète dans .NET Framework 2.0. Vous pouvez créer une instance de validation à l’aide de XmlReader la XmlReaderSettings classe et de la Create méthode. Pour plus d'informations, consultez la section Notes de la page de référence XmlReader.
Ce constructeur analyse la chaîne donnée en tant que fragment de XML. Si le fragment XML est un élément ou un attribut, vous pouvez contourner les règles de niveau racine pour les documents XML bien formés. Ce constructeur peut gérer les chaînes retournées à partir de ReadInnerXml.
Le tableau suivant répertorie les valeurs valides pour fragType
et la façon dont le lecteur analyse chacun des différents types de nœuds.
XmlNodeType | Fragment peut contenir |
---|---|
Élément | Tout contenu d’élément valide (par exemple, toute combinaison d’éléments, commentaires, instructions de traitement, cdata, texte et références d’entité). |
Attribut | Valeur d’un attribut (partie à l’intérieur des guillemets). |
Document | Contenu d’un document XML entier ; cela applique des règles de niveau document. |
Si ce lecteur valide à l’aide de la définition de type de document (DTD) (autrement dit, ValidationType est défini sur ValidationType.DTD ou ValidationType.Auto), le XmlParserContext
constructeur doit fournir toutes les informations DocumentType nécessaires.
Notes
Il n’est pas possible de valider un fragment à l’aide de DTD. Par définition, DTD nécessite qu’un document entier soit chargé pour la validation.
Si ce lecteur validera à l’aide XML-Data de schémas XDR (Réduits) ou XML Schema Definition Language (XSD), utilisez la Schemas propriété pour spécifier les XmlSchemaCollection schémas (le XmlParserContext
documentType n’a pas besoin de fournir les informations DocumentType).