XmlValidatingReader.SchemaType Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene un objeto de tipo de esquema.
public:
property System::Object ^ SchemaType { System::Object ^ get(); };
public object? SchemaType { get; }
public object SchemaType { get; }
member this.SchemaType : obj
Public ReadOnly Property SchemaType As Object
Valor de propiedad
XmlSchemaDatatype, XmlSchemaSimpleType o XmlSchemaComplexType, dependiendo de que el valor del nodo sea un tipo de esquema XSD (lenguaje de definición de esquemas XML) integrado o un tipo simpleType o complexType definido por el usuario; es null
si el nodo actual no tiene tipo de esquema.
Ejemplos
En el ejemplo siguiente se muestra la información de tipo de cada uno de los elementos del documento XML.
#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
En el ejemplo se usan los siguientes archivos de entrada.
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>
Comentarios
Nota
La XmlValidatingReader clase está obsoleta en .NET Framework 2.0. Puede crear una instancia de XmlReader validación mediante la XmlReaderSettings clase y el Create método . Para obtener más información, vea la sección Comentarios de la página de referencia de XmlReader.
El usuario debe probar el tipo devuelto. Por ejemplo,
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
}
Si se realiza la validación del esquema XML, o XmlSchemaType
XmlSchemaDatatype
corresponde al elemento actual que se va a leer. Si se realiza la definición de tipo de documento (validación DTD), esta propiedad devuelve null
.
XmlSchemaDatatype
se devuelve si el elemento actual, o atributo, es un tipo simple que puede especificar restricciones de validación especiales en los tipos simples, como min y max.
XmlSchemaSimpleType
se devuelve si el elemento actual, o atributo, es un simpleType definido por el usuario.
XmlSchemaComplexType
se devuelve si el elemento actual es un complexType definido por el usuario. Los atributos no pueden devolver este tipo.
Nota
Si ValidationType se ha establecido en ValidationType.None, no se proporciona información de tipo de datos de esquemas o DTD.
Precaución
Después de llamar a Close, SchemaType devolverá Null.