Sdílet prostřednictvím


XmlValidatingReader Konstruktory

Definice

Inicializuje novou instanci XmlValidatingReader třídy.

Přetížení

XmlValidatingReader(XmlReader)

Inicializuje novou instanci XmlValidatingReader třídy, která ověří obsah vrácený z dané XmlReader.

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicializuje novou instanci XmlValidatingReader třídy se zadanými hodnotami.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicializuje novou instanci XmlValidatingReader třídy se zadanými hodnotami.

XmlValidatingReader(XmlReader)

Inicializuje novou instanci XmlValidatingReader třídy, která ověří obsah vrácený z dané XmlReader.

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)

Parametry

reader
XmlReader

Při XmlReader ověřování se má číst od. Aktuální implementace podporuje pouze XmlTextReader.

Výjimky

Zadaná čtečka není XmlTextReader.

Příklady

Následující příklad ověří dva dokumenty.

#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

Ukázka používá následující vstupní soubory:

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>

Poznámky

Poznámka

Třída XmlValidatingReader je zastaralá v rozhraní .NET Framework 2.0. Ověřování instance můžete vytvořit XmlReader pomocí XmlReaderSettings třídy a Create metody. Další informace najdete v části Poznámky referenční XmlReader stránky.

Všechny uzly vrácené z dané čtečky XmlReader se také vrátí z této ověřovací čtečky, takže v procesu nedojde ke ztrátě informací. Nové uzly, které nejsou vráceny z podkladové čtečky, mohou být přidány touto čtečkou (například výchozí atributy a podřízené položky odkazu na entitu). Všechny vlastnosti nastavené na dané straně XmlTextReader platí také pro tuto čtečku ověřování. Pokud má například zadaná čtečka sadu WhitespaceHandling.None, tato čtečka ověřování také ignoruje prázdné znaky.

Pokud jsou k ověření potřeba definice typu externího dokumentu (DTD) nebo schémata, vlastnost nastaví XmlResolver objekt tak, XmlResolver aby se používal k překladu externích prostředků.

Viz také

Platí pro

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicializuje novou instanci XmlValidatingReader třídy se zadanými hodnotami.

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)

Parametry

xmlFragment
Stream

Stream obsahující fragment XML, který se má analyzovat.

fragType
XmlNodeType

Fragment XmlNodeType XML. To určuje, co může fragment obsahovat (viz tabulka níže).

context
XmlParserContext

Fragment XmlParserContext XML se má analyzovat. To zahrnuje XmlNameTable použití, kódování, obor názvů, aktuální xml:langa xml:space obor.

Výjimky

fragType není jedním z typů uzlů uvedených v následující tabulce.

Poznámky

Poznámka

Třída XmlValidatingReader je zastaralá v rozhraní .NET Framework 2.0. Ověřování instance můžete vytvořit XmlReader pomocí XmlReaderSettings třídy a Create metody. Další informace najdete v části Poznámky referenční XmlReader stránky.

Tento konstruktor analyzuje daný řetězec jako fragment XML. Pokud je fragment XML elementem nebo atributem, můžete obejít pravidla kořenové úrovně pro správně vytvořené dokumenty XML.

Následující tabulka uvádí platné hodnoty pro fragType a způsob analýzy jednotlivých typů uzlů.

Xmlnodetype Fragment může obsahovat
Prvek Jakýkoli platný obsah elementu (například libovolná kombinace prvků, komentářů, pokynů pro zpracování, cdata, text a odkazy na entity).
Atribut Hodnota atributu (část uvnitř uvozovek).
Dokument Obsah celého dokumentu XML; to vynucuje pravidla na úrovni dokumentu.

Čtenář použije následující kroky k určení kódování streamu:

  1. Zkontroluje XmlParserContext.Encoding vlastnost a určí kódování.

  2. Encoding Pokud je nullvlastnost , čtenář vyhledá na začátku datového proudu značku bajtového pořadí.

  3. Encoding Pokud je nullvlastnost a není nalezena značka pořadí bajtů, čtenář předpokládá, že stream je kódován v UTF-8.

Pokud bude tato čtečka ověřovat pomocí definice typu dokumentu (DTD) (tj ValidationType . je nastavena na ValidationType.DTD nebo ValidationType.Auto), XmlParserContext musí zadaný v konstruktoru zadat všechny potřebné informace DocumentType.

Poznámka

Fragment není možné ověřit pomocí DTD. Podle definice DTD vyžaduje, aby byl pro ověření načten celý dokument.

Pokud bude tato čtečka ověřovat pomocí schémat XML-Data Omezené (XDR) nebo jazyka XSD (Xml Schema Definition Language), použijte Schemas vlastnost k určení XmlSchemaCollection , která obsahuje schémata (to znamená, XmlParserContext že není nutné zadat informace DocumentType).

Viz také

Platí pro

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicializuje novou instanci XmlValidatingReader třídy se zadanými hodnotami.

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)

Parametry

xmlFragment
String

Řetězec obsahující fragment XML k analýze.

fragType
XmlNodeType

Fragment XmlNodeType XML. To také určuje, co může řetězec fragmentu obsahovat (viz tabulka níže).

context
XmlParserContext

Fragment XmlParserContext XML se má analyzovat. To zahrnuje NameTable použití, kódování, obor názvů, aktuální xml:lang a xml:space scope.

Výjimky

fragType není jedním z typů uzlů uvedených v následující tabulce.

Příklady

Následující příklad čte fragment XML. Používá XmlParserContext k zpracování shody oboru názvů a jeho XmlNamespaceManager funkce.

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

Poznámky

Poznámka

Třída XmlValidatingReader je zastaralá v rozhraní .NET Framework 2.0. Ověřování instance můžete vytvořit XmlReader pomocí XmlReaderSettings třídy a Create metody. Další informace najdete v části Poznámky referenční XmlReader stránky.

Tento konstruktor analyzuje daný řetězec jako fragment XML. Pokud je fragment XML elementem nebo atributem, můžete obejít pravidla kořenové úrovně pro správně vytvořené dokumenty XML. Tento konstruktor dokáže zpracovat řetězce vrácené z ReadInnerXml.

Následující tabulka uvádí platné hodnoty pro fragType a způsob analýzy jednotlivých typů uzlů.

Xmlnodetype Fragment může obsahovat
Prvek Jakýkoli platný obsah elementu (například libovolná kombinace prvků, komentářů, pokynů pro zpracování, cdata, text a odkazy na entity).
Atribut Hodnota atributu (část uvnitř uvozovek).
Dokument Obsah celého dokumentu XML; to vynucuje pravidla na úrovni dokumentu.

Pokud bude tato čtečka ověřovat pomocí definice typu dokumentu (DTD) (tj ValidationType . je nastavena na ValidationType.DTD nebo ValidationType.Auto), XmlParserContext musí zadaný v konstruktoru zadat všechny potřebné informace DocumentType.

Poznámka

Fragment není možné ověřit pomocí DTD. DTD definice vyžaduje, aby byl pro ověření načten celý dokument.

Pokud tento čtenář bude ověřovat pomocí schémat XML-Data Reduced (XDR) nebo XML Schema definition language (XSD), použijte Schemas vlastnost k určení XmlSchemaCollection , která obsahuje schémata ( XmlParserContext není nutné zadat informace DocumentType).

Viz také

Platí pro