XmlValidatingReader.SchemaType Właściwość

Definicja

Pobiera obiekt typu schematu.Gets a schema type object.

public:
 property System::Object ^ SchemaType { System::Object ^ get(); };
public object SchemaType { get; }
member this.SchemaType : obj
Public ReadOnly Property SchemaType As Object

Wartość właściwości

Object

XmlSchemaDatatype, XmlSchemaSimpleTypelub XmlSchemaComplexType w zależności od tego, czy wartość węzła jest wbudowanym typem języka definicji schematu XML (XSD), czy zdefiniowanym przez użytkownika simpleType lub complexType; null, jeśli bieżący węzeł nie ma żadnego typu schematu.XmlSchemaDatatype, XmlSchemaSimpleType, or XmlSchemaComplexType depending whether the node value is a built in XML Schema definition language (XSD) type or a user defined simpleType or complexType; null if the current node has no schema type.

Przykłady

Poniższy przykład wyświetla informacje o typie dla każdego elementu w dokumencie XML.The following example displays the type information for each of the elements in the XML document.

#using <System.Xml.dll>
#using <System.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;

public ref class Sample
{
private:
   static void ValidationCallBack( Object^ sender, ValidationEventArgs^ args )
   {
      Console::WriteLine( "***Validation error" );
      Console::WriteLine( "\tSeverity: {0}", args->Severity );
      Console::WriteLine( "\tMessage  : {0}", args->Message );
   }

public:
   static void main()
   {
      XmlTextReader^ tr = gcnew XmlTextReader( "booksSchema.xml" );
      XmlValidatingReader^ vr = gcnew XmlValidatingReader( tr );
      vr->Schemas->Add( nullptr, "books.xsd" );
      vr->ValidationType = ValidationType::Schema;
      vr->ValidationEventHandler += gcnew ValidationEventHandler( Sample::ValidationCallBack );
      while ( vr->Read() )
      {
         if ( vr->NodeType == XmlNodeType::Element )
         {
            if ( dynamic_cast<XmlSchemaComplexType^>(vr->SchemaType) != nullptr )
            {
               XmlSchemaComplexType^ sct = dynamic_cast<XmlSchemaComplexType^>(vr->SchemaType);
               Console::WriteLine( " {0}( {1})", vr->Name, sct->Name );
            }
            else
            {
               Object^ value = vr->ReadTypedValue();
               Console::WriteLine( " {0}( {1}): {2}", vr->Name, value->GetType()->Name, value );
            }
         }
      }
   }
};

int main()
{
   Sample::main();
}
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

public class Sample{

  public static void Main(){

  XmlTextReader tr = new XmlTextReader("booksSchema.xml");
  XmlValidatingReader vr = new XmlValidatingReader(tr);

  vr.Schemas.Add(null, "books.xsd");
  vr.ValidationType = ValidationType.Schema;
  vr.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

  while(vr.Read()){
    if(vr.NodeType == XmlNodeType.Element){
      if(vr.SchemaType is XmlSchemaComplexType){
        XmlSchemaComplexType sct = (XmlSchemaComplexType)vr.SchemaType;
        Console.WriteLine("{0}({1})", vr.Name, sct.Name);
      }
      else{
        object value = vr.ReadTypedValue();
        Console.WriteLine("{0}({1}):{2}", vr.Name, value.GetType().Name, value);
      }
    }
  }
 }

  private static void ValidationCallBack (object sender, ValidationEventArgs args){
    Console.WriteLine("***Validation error");
    Console.WriteLine("\tSeverity:{0}", args.Severity);
    Console.WriteLine("\tMessage  :{0}", args.Message);
  }
}
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

public class Sample

  public shared sub Main()
  
  Dim tr as XmlTextReader = new XmlTextReader("booksSchema.xml")
  Dim vr as XmlValidatingReader = new XmlValidatingReader(tr)
 
  vr.Schemas.Add(nothing, "books.xsd")
  vr.ValidationType = ValidationType.Schema
  AddHandler vr.ValidationEventHandler, AddressOf ValidationCallBack

  while(vr.Read())

    if(vr.NodeType = XmlNodeType.Element)
    
      if (vr.SchemaType.ToString() = "System.Xml.Schema.XmlSchemaComplexType")
        Dim sct as XmlSchemaComplexType = CType(vr.SchemaType,XmlSchemaComplexType)
        Console.WriteLine("{0}({1})", vr.Name, sct.Name)
      else      
        Dim value as object = vr.ReadTypedValue()
        Console.WriteLine("{0}({1}):{2}", vr.Name, value.GetType().Name, value)    
      end if
    end if
  end while
  end sub

  private shared sub ValidationCallBack (sender as object, args as ValidationEventArgs)

   Console.WriteLine("***Validation error")
   Console.WriteLine("Severity:{0}", args.Severity)
   Console.WriteLine("Message  :{0}", args.Message)
  end sub
end class

W przykładzie są stosowane następujące pliki wejściowe.The example uses the following input files.

booksSchema.xml

<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema">
  <book genre="autobiography">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </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>

Uwagi

Uwaga

Klasa XmlValidatingReader jest przestarzała w .NET Framework 2.0.NET Framework 2.0.The XmlValidatingReader class is obsolete in .NET Framework 2.0.NET Framework 2.0. Można utworzyć sprawdzanie poprawności wystąpienia XmlReader przy użyciu klasy XmlReaderSettings i metody Create.You can create a validating XmlReader instance by using the XmlReaderSettings class and the Create method. Aby uzyskać więcej informacji, zobacz sekcję uwagi na stronie odniesienia XmlReader.For more information, see the Remarks section of the XmlReader reference page.

Użytkownik musi przeprowadzić test dla zwracanego typu.The user needs to test for the returned type. Na przykład:For example,

object obj = vreader.SchemaType;  
 if (obj is XmlSchemaType)  
 {  
   XmlSchemaType st = (XmlSchemaType)obj;  
   // use XmlSchemaType object  
 }  
 if (obj is XmlSchemaDatatype)  
 {  
   XmlSchemaDatatype sd = (XmlSchemaDatatype)obj;  
   Type vt = sd.ValueType;  
   // use XmlSchemaDatatype object  
       }  

Jeśli walidacja schematu XML jest wykonywana, XmlSchemaType lub XmlSchemaDatatype odpowiada bieżącemu elementowi odczytywanemu.If XML Schema validation is being performed, the XmlSchemaType or XmlSchemaDatatype corresponds to the current element being read. Jeśli jest wykonywana definicja typu dokumentu (Walidacja DTD), ta właściwość zwraca null.If document type definition (DTD validation) is being performed, this property returns null.

XmlSchemaDatatype jest zwracany, jeśli bieżący element lub atrybut, jest typem prostym, który może określać specjalne ograniczenia walidacji dla typów prostych, takich jak min i max.XmlSchemaDatatype is returned if the current element, or attribute, is a simple type that can specify special validation constraints on the simple types, like min and max.

XmlSchemaSimpleType jest zwracana, jeśli bieżący element lub atrybut jest zdefiniowany przez użytkownika simpleType.XmlSchemaSimpleType is returned if the current element, or attribute, is a user defined simpleType.

XmlSchemaComplexType jest zwracana, jeśli bieżący element jest typem complexType zdefiniowanym przez użytkownika.XmlSchemaComplexType is returned if the current element is a user defined complexType. Ten typ nie może być zwracany przez atrybuty.This type cannot be returned by attributes.

Uwaga

Jeśli ValidationType ustawiono na typ walidacji. Brak, nie podano informacji o typie danych z obu schematów lub DTD.If ValidationType has been set to ValidationType.None, no data type information is provided from either schemas or DTDs.

Przestroga

Po wywołaniu Close, SchemaType zwróci wartość null.After calling Close, SchemaType will return Null.

Dotyczy

Zobacz też