XmlValidatingReader.SchemaType 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得結構描述類型物件。
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
屬性值
XmlSchemaDatatype、XmlSchemaSimpleType 或 XmlSchemaComplexType,視節點值為內建的 XML 結構描述定義語言 (XSD) 類型或使用者自訂的 simpleType 或 complexType 而定,如果目前節點沒有結構描述類型,則為 null
。
範例
下列範例會顯示 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
此範例會使用下列輸入檔。
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>
備註
注意
類別 XmlValidatingReader 在 .NET Framework 2.0 中已過時。 您可以使用 類別和 Create 方法建立驗證 XmlReader 實例 XmlReaderSettings 。 如需詳細資訊,請參閱 XmlReader 參考頁面的<備註>一節。
使用者必須測試傳回的類型。 例如,
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
}
如果正在執行 XML 架構驗證, XmlSchemaType
或 XmlSchemaDatatype
會對應至正在讀取的目前專案。 如果執行 DTD 驗證 (檔案類型定義) ,則此屬性會傳 null
回 。
XmlSchemaDatatype
如果目前的專案或屬性是一種簡單類型,可以在簡單類型上指定特殊驗證條件約束,例如 min 和 max,則會傳回 。
XmlSchemaSimpleType
如果目前的專案或屬性是使用者定義的 simpleType,則會傳回 。
XmlSchemaComplexType
如果目前專案是使用者定義的 complexType,則會傳回 。 屬性無法傳回此類型。
注意
如果 ValidationType 已設定為 ValidationType.None,則不會從架構或 DTD 提供任何資料類型資訊。
警告
呼叫 Close 之後,SchemaType 會傳回 Null。