Condividi tramite


XmlValidatingReader Costruttori

Definizione

Inizializza una nuova istanza della classe XmlValidatingReader.

Overload

XmlValidatingReader(XmlReader)

Inizializza una nuova istanza della classe XmlValidatingReader che convalida il contenuto restituito dall'oggetto XmlReader specificato.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inizializza una nuova istanza della classe XmlValidatingReader con i valori specificati.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inizializza una nuova istanza della classe XmlValidatingReader con i valori specificati.

XmlValidatingReader(XmlReader)

Inizializza una nuova istanza della classe XmlValidatingReader che convalida il contenuto restituito dall'oggetto XmlReader specificato.

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)

Parametri

reader
XmlReader

Oggetto XmlReader da cui leggere durante la convalida. L'implementazione corrente supporta solo XmlTextReader.

Eccezioni

Il visualizzatore specificato non è un oggetto XmlTextReader.

Esempio

Nell'esempio seguente vengono convalidati due documenti.

#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'esempio usa i file di input seguenti:

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>

Commenti

Nota

La XmlValidatingReader classe è obsoleta in .NET Framework 2.0. È possibile creare un'istanza di convalida XmlReader usando la classe e il Create XmlReaderSettings metodo . Per altre informazioni, vedere la sezione Note della pagina di riferimento XmlReader.

Tutti i nodi restituiti dall'oggetto specificato XmlReader vengono restituiti anche da questo lettore di convalida, quindi non esiste alcuna perdita di informazioni nel processo. I nuovi nodi non restituiti dal lettore sottostante possono essere aggiunti da questo lettore , ad esempio gli attributi predefiniti e gli elementi figlio di un riferimento a un'entità. Tutte le proprietà impostate sull'oggetto specificato XmlTextReader si applicano anche a questo lettore di convalida. Ad esempio, se il lettore fornito aveva WhitespaceHandling.None impostato, questo lettore di convalida ignora anche lo spazio vuoto.

Quando sono necessarie definizioni del tipo di documento esterno (DTD) o schemi per la convalida, la XmlResolver proprietà imposta l'oggetto XmlResolver da usare per la risoluzione delle risorse esterne.

Vedi anche

Si applica a

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inizializza una nuova istanza della classe XmlValidatingReader con i valori specificati.

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)

Parametri

xmlFragment
Stream

Flusso contenente il frammento XML da analizzare.

fragType
XmlNodeType

Oggetto XmlNodeType del frammento XML. Determina il contenuto del frammento (vedere la tabella seguente).

context
XmlParserContext

Oggetto XmlParserContext in cui deve essere analizzato il frammento XML. Include l'oggetto XmlNameTable da usare, la codifica, l'ambito dello spazio dei nomi, l'oggetto xml:lang corrente e l'ambito xml:space.

Eccezioni

fragType non è uno dei tipi di nodo elencati nella tabella seguente.

Commenti

Nota

La XmlValidatingReader classe è obsoleta in .NET Framework 2.0. È possibile creare un'istanza di convalida XmlReader usando la classe e il Create XmlReaderSettings metodo . Per altre informazioni, vedere la sezione Note della pagina di riferimento XmlReader.

Questo costruttore analizza la stringa specificata come frammento di XML. Se il frammento XML è un elemento o un attributo, è possibile ignorare le regole di livello radice per documenti XML ben formati.

La tabella seguente elenca i valori validi per fragType e il modo in cui il lettore analizza ognuno dei diversi tipi di nodo.

XmlNodeType Frammento può contenere
Elemento Qualsiasi contenuto di elemento valido(ad esempio, qualsiasi combinazione di elementi, commenti, istruzioni di elaborazione, cdata, testo e riferimenti alle entità).
Attributo Valore di un attributo (la parte all'interno delle virgolette).
Documento Contenuto di un intero documento XML; in questo modo vengono applicate regole a livello di documento.

Il lettore usa la procedura seguente per determinare la codifica del flusso:

  1. Controlla la proprietà per determinare la XmlParserContext.Encoding codifica.

  2. Se la proprietà è null, il Encoding lettore controlla un contrassegno di byte all'inizio del flusso.

  3. Se la Encoding proprietà è null, e non viene trovato alcun contrassegno per byte, il lettore presuppone che il flusso sia codificato in UTF-8.

Se questo lettore convalida con la definizione del tipo di documento (DTD) (ovvero, ValidationType è impostato su ValidationType.DTD o ValidationType.Auto), l'oggetto XmlParserContext specificato nel costruttore deve fornire tutte le informazioni necessarie su DocumentType.

Nota

Non è possibile convalidare un frammento usando un DTD. Per definizione, un DTD richiede il caricamento di un intero documento per la convalida.

Se questo lettore verrà convalidato usando XML-Data schemi XDR (Reduced) o XML Schema Definition Language (XSD), utilizzare la Schemas proprietà per specificare gli XmlSchemaCollection schemi che contengono gli schemi , ovvero XmlParserContext non è necessario fornire le informazioni di DocumentType.

Vedi anche

Si applica a

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inizializza una nuova istanza della classe XmlValidatingReader con i valori specificati.

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)

Parametri

xmlFragment
String

Stringa che contiene il frammento XML da analizzare.

fragType
XmlNodeType

Oggetto XmlNodeType del frammento XML. Determina anche il contenuto della stringa del frammento (vedere la tabella seguente).

context
XmlParserContext

Oggetto XmlParserContext in cui deve essere analizzato il frammento XML. Include l'oggetto NameTable da usare, la codifica, l'ambito dello spazio dei nomi, l'ambito xml:lang corrente e l'ambito xml:space corrente.

Eccezioni

fragType non è uno dei tipi di nodo elencati nella tabella seguente.

Esempio

Nell'esempio seguente viene letto un frammento XML. Usa un XmlParserContext oggetto e il relativo XmlNamespaceManager per gestire la corrispondenza dello spazio dei nomi.

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

Commenti

Nota

La XmlValidatingReader classe è obsoleta in .NET Framework 2.0. È possibile creare un'istanza di convalida XmlReader usando la classe e il Create XmlReaderSettings metodo . Per altre informazioni, vedere la sezione Note della pagina di riferimento XmlReader.

Questo costruttore analizza la stringa specificata come frammento di XML. Se il frammento XML è un elemento o un attributo, è possibile ignorare le regole di livello radice per documenti XML ben formati. Questo costruttore può gestire le stringhe restituite da ReadInnerXml.

La tabella seguente elenca i valori validi per fragType e il modo in cui il lettore analizza ognuno dei diversi tipi di nodo.

XmlNodeType Frammento può contenere
Elemento Qualsiasi contenuto di elemento valido(ad esempio, qualsiasi combinazione di elementi, commenti, istruzioni di elaborazione, cdata, testo e riferimenti alle entità).
Attributo Valore di un attributo (la parte all'interno delle virgolette).
Documento Contenuto di un intero documento XML; in questo modo vengono applicate regole a livello di documento.

Se questo lettore verrà convalidato usando la definizione del tipo di documento (DTD) (ovvero, ValidationType è impostata su ValidationType.DTD o ValidationType.Auto), l'oggetto XmlParserContext specificato nel costruttore deve fornire tutte le informazioni necessarie su DocumentType.

Nota

Non è possibile convalidare un frammento usando DTD. Per definizione DTD è necessario caricare un intero documento per la convalida.

Se questo lettore verrà convalidato usando XML-Data schemi XDR (Reduced) o XML Schema Definition Language (XSD), utilizzare la Schemas proprietà per specificare gli XmlSchemaCollection schemi che contengono gli schemi (non XmlParserContext è necessario fornire le informazioni di DocumentType).

Vedi anche

Si applica a