Partager via


XmlValidatingReader Constructeurs

Définition

Initialise une nouvelle instance de la classe XmlValidatingReader.

Surcharges

XmlValidatingReader(XmlReader)

Initialise une nouvelle instance de la classe XmlValidatingReader qui valide le contenu retourné à partir du XmlReader en question.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Initialise une nouvelle instance de la classe XmlValidatingReader avec les valeurs spécifiées.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Initialise une nouvelle instance de la classe XmlValidatingReader avec les valeurs spécifiées.

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 :

  1. Vérifie la propriété pour déterminer l’encodage XmlParserContext.Encoding .

  2. Si la propriété est null, le Encoding lecteur recherche une marque d’ordre d’octet au début du flux.

  3. Si la Encoding propriété est null, 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).

Voir aussi

S’applique à