Udostępnij za pośrednictwem


XmlValidatingReader Konstruktory

Definicja

Inicjuje nowe wystąpienie klasy XmlValidatingReader.

Przeciążenia

XmlValidatingReader(XmlReader)

Inicjuje XmlValidatingReader nowe wystąpienie klasy, które weryfikuje zawartość zwróconą z danego XmlReaderelementu .

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicjuje XmlValidatingReader nowe wystąpienie klasy z określonymi wartościami.

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicjuje XmlValidatingReader nowe wystąpienie klasy z określonymi wartościami.

XmlValidatingReader(XmlReader)

Inicjuje XmlValidatingReader nowe wystąpienie klasy, które weryfikuje zawartość zwróconą z danego XmlReaderelementu .

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

Element XmlReader do odczytu podczas walidacji. Bieżąca implementacja obsługuje tylko XmlTextReader.

Wyjątki

Określony czytnik nie jest elementem XmlTextReader.

Przykłady

Poniższy przykład weryfikuje dwa 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

W przykładzie użyto następujących plików wejściowych:

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>

Uwagi

Uwaga

Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0. Wystąpienie weryfikacji XmlReader można utworzyć przy użyciu XmlReaderSettings klasy i Create metody . Aby uzyskać więcej informacji, zobacz sekcję Uwagi na stronie referencyjnej XmlReader .

Wszystkie węzły zwrócone z danego XmlReader elementu są również zwracane z tego czytnika sprawdzania poprawności, więc nie ma utraty informacji w procesie. Nowe węzły, które nie są zwracane z czytnika bazowego, mogą zostać dodane przez tego czytelnika (na przykład atrybuty domyślne i elementy podrzędne odwołania do jednostki). Wszystkie właściwości ustawione w danym XmlTextReader elemecie mają również zastosowanie do tego sprawdzania poprawności czytnika. Jeśli na przykład podany czytnik miał ustawioną wartość WhitespaceHandling.None, ta walidacja czytnika również ignoruje białe znaki.

Gdy do weryfikacji są wymagane definicje typów dokumentów zewnętrznych (DTD) lub schematy, XmlResolver właściwość ustawia XmlResolver obiekt do użycia do rozpoznawania zasobów zewnętrznych.

Zobacz też

Dotyczy

XmlValidatingReader(Stream, XmlNodeType, XmlParserContext)

Inicjuje XmlValidatingReader nowe wystąpienie klasy z określonymi wartościami.

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

Strumień zawierający fragment XML do przeanalizowana.

fragType
XmlNodeType

Fragment XmlNodeType XML. Określa to, co może zawierać fragment (patrz poniższa tabela).

context
XmlParserContext

Element XmlParserContext , w którym fragment XML ma być analizowany. Obejmuje XmlNameTable to użycie, kodowanie, zakres przestrzeni nazw, bieżący xml:langzakres i xml:space zakres.

Wyjątki

fragType nie jest jednym z typów węzłów wymienionych w poniższej tabeli.

Uwagi

Uwaga

Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0. Wystąpienie weryfikacji XmlReader można utworzyć przy użyciu XmlReaderSettings klasy i Create metody . Aby uzyskać więcej informacji, zobacz sekcję Uwagi na stronie referencyjnej XmlReader .

Ten konstruktor analizuje dany ciąg jako fragment kodu XML. Jeśli fragment XML jest elementem lub atrybutem, możesz pominąć reguły poziomu głównego dla dobrze sformułowanych dokumentów XML.

W poniższej tabeli wymieniono prawidłowe wartości i fragType sposób analizowania poszczególnych typów węzłów przez czytelnika.

XmlNodeType Fragment może zawierać
Element Dowolna prawidłowa zawartość elementu (na przykład dowolna kombinacja elementów, komentarzy, instrukcji przetwarzania, cdata, tekst i odwołania do jednostki).
Atrybut Wartość atrybutu (część wewnątrz cudzysłowów).
Dokument Zawartość całego dokumentu XML; Wymusza to reguły na poziomie dokumentu.

Czytelnik używa następujących kroków, aby określić kodowanie strumienia:

  1. Sprawdza właściwość w XmlParserContext.Encoding celu określenia kodowania.

  2. Encoding Jeśli właściwość to null, czytnik sprawdza znacznik kolejności bajtów na początku strumienia.

  3. Encoding Jeśli właściwość ma nullwartość , a nie znaleziono znacznika kolejności bajtów, czytnik zakłada, że strumień jest zakodowany w formacie UTF-8.

Jeśli ten czytelnik będzie weryfikował przy użyciu definicji typu dokumentu (DTD) (czyli ValidationType jest ustawiony na ValidationType.DTD lub ValidationType.Auto), XmlParserContext określony w konstruktorze musi podać wszystkie niezbędne informacje DocumentType.

Uwaga

Nie można zweryfikować fragmentu przy użyciu dtD. Zgodnie z definicją dtD wymaga załadowania całego dokumentu do weryfikacji.

Jeśli ten czytelnik będzie weryfikowany przy użyciu schematów XML-Data Zredukowane (XDR) lub XML Schema Definition Language (XSD), użyj Schemas właściwości , aby określić XmlSchemaCollection , który zawiera schematy (czyli XmlParserContext nie musi podawać informacji DocumentType).

Zobacz też

Dotyczy

XmlValidatingReader(String, XmlNodeType, XmlParserContext)

Inicjuje XmlValidatingReader nowe wystąpienie klasy z określonymi wartościami.

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

Ciąg zawierający fragment XML do przeanalizowana.

fragType
XmlNodeType

Fragment XmlNodeType XML. Określa to również, co może zawierać ciąg fragmentu (zobacz tabelę poniżej).

context
XmlParserContext

Element XmlParserContext , w którym fragment XML ma być analizowany. Obejmuje NameTable to użycie, kodowanie, zakres przestrzeni nazw, bieżący zakres xml:lang i zakres xml:space.

Wyjątki

fragType nie jest jednym z typów węzłów wymienionych w poniższej tabeli.

Przykłady

Poniższy przykład odczytuje fragment XML. Używa elementu XmlParserContext i do XmlNamespaceManager obsługi dopasowywania przestrzeni nazw.

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

Uwagi

Uwaga

Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0. Wystąpienie weryfikacji XmlReader można utworzyć przy użyciu XmlReaderSettings klasy i Create metody . Aby uzyskać więcej informacji, zobacz sekcję Uwagi na stronie referencyjnej XmlReader .

Ten konstruktor analizuje dany ciąg jako fragment kodu XML. Jeśli fragment XML jest elementem lub atrybutem, możesz pominąć reguły poziomu głównego dla dobrze sformułowanych dokumentów XML. Ten konstruktor może obsługiwać ciągi zwracane z ReadInnerXmlelementu .

W poniższej tabeli wymieniono prawidłowe wartości i fragType sposób analizowania poszczególnych typów węzłów przez czytelnika.

XmlNodeType Fragment może zawierać
Element Dowolna prawidłowa zawartość elementu (na przykład dowolna kombinacja elementów, komentarzy, instrukcji przetwarzania, cdata, tekst i odwołania do jednostki).
Atrybut Wartość atrybutu (część wewnątrz cudzysłowów).
Dokument Zawartość całego dokumentu XML; Wymusza to reguły na poziomie dokumentu.

Jeśli ten czytelnik będzie weryfikowany przy użyciu definicji typu dokumentu (DTD) (czyli ValidationType jest ustawiony na ValidationType.DTD lub ValidationType.Auto), XmlParserContext określony w konstruktorze musi podać wszystkie niezbędne informacje DocumentType.

Uwaga

Nie można zweryfikować fragmentu przy użyciu dtD. Zgodnie z definicją DTD wymaga załadowania całego dokumentu do weryfikacji.

Jeśli ten czytelnik będzie weryfikowany przy użyciu schematów XML-Data Zredukowane (XDR) lub XML Schema Definition Language (XSD), użyj Schemas właściwości , aby określić XmlSchemaCollection , który zawiera schematy (nie XmlParserContext musi podawać informacji DocumentType).

Zobacz też

Dotyczy