XmlValidatingReader::SchemaType Property
Gets a schema type object.
Assembly: System.Xml (in System.Xml.dll)
Property Value
Type: System::Object^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.
Note |
|---|
The XmlValidatingReader class is obsolete in .NET Framework 2.0. You can create a validating XmlReader instance by using the XmlReaderSettings class and the Create method. For more information, see the Remarks section of the XmlReader reference page. |
The user needs to test for the returned type. 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
}
If XML Schema validation is being performed, the XmlSchemaType or XmlSchemaDatatype corresponds to the current element being read. If document type definition (DTD validation) is being performed, this property returns null.
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 is returned if the current element, or attribute, is a user defined simpleType.
XmlSchemaComplexType is returned if the current element is a user defined complexType. This type cannot be returned by attributes.
Note |
|---|
If ValidationType has been set to ValidationType.None, no data type information is provided from either schemas or DTDs. |
Caution |
|---|
After calling Close, SchemaType will return Null. |
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(); }
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>
Available since 1.1

