共用方式為


存取結構描述型別資訊

您可使用 SchemaType 屬性存取結構描述型別資訊。SchemaType 屬性會根據值是內建 XML 結構描述定義語言 (XSD) 型別,或是使用者定義型別 (例如 simpleTypecomplexType),傳回 XmlSchemaTypeXmlSchemaDataType 任何一個。

檢查傳回型別

您可使用 XmlValidatingReader 類別的 SchemaType 屬性檢查傳回型別。

下列程式碼範例會檢查傳回型別。

Dim obj As object = vreader.SchemaType
if (obj is XmlSchemaType)
    XmlSchemaType st = obj.BaseSchemaType
if (obj is XmlSchemaDataType)
    XmlSchemaDatatype vt = obj.ValueType
[C#]
object obj=vreader.SchemaType;
if (obj is XmlSchemaType)
    XmlSchemaType st = obj.BaseSchemaType;
if (obj is XmlSchemaDataType)
    XmlSchemaDatatype vt = obj.ValueType;

如需使用 SchemaType 屬性的範例,請參閱 XmlValidatingReader.SchemaType 屬性

驗證結構描述

如果您正在執行 XML 結構描述 (XSD) 或 XML-Data Reduced (XDR) 結構描述驗證,XmlSchemaTypeXmlSchemaDataType 會對應至正在讀取的目前項目。

如果目前項目或屬性是簡單型別,會傳回 XmlSchemaDataType。如果目前項目或屬性是使用者定義的複雜型別,則會傳回 XmlSchemaType

下列程式碼範例會判斷 SchemaType 屬性是否為 XmlSchemaComplexType。範例使用 ReadTypedValue 方法檢查物件的值,並將其寫出至主控台。

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
[C#]
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);
                    }
                }
            }

如果您正在執行文件型別定義 (DTD) 驗證,XmlSchemaTypeXmlSchemaDataType 會傳回 Null 參考。

當呼叫 Close 方法時,這個屬性會回到 Null 參考。如果目前節點不具結構描述型別或是沒有結構描述存在,則可傳回 Null 參考。

使用 ReadTypedValue 方法

ReadTypedValue 方法會為指定的 XML 結構描述項目讀取並傳回對應至 .NET Framework 型別物件的物件。例如,如果型別是定義為 xs:int,則會為這個物件傳回 .NET Framework 型別 Int32

執行的作業是依目前節點型別而定,同時依照下列規則進行:

  • 如果節點是屬性節點,讀取器會保持在目前的位置上。
  • 如果節點是項目節點,會將讀取器置於 EndElement,讀取 CDATA、文字、泛空白字元 (White Space)、顯著性泛空白字元和註解。
  • 如果型別不具直接對應 (例如 NMTOKENS),會將其以字串傳回。
  • 如果您將 ValidationType 屬性設定為 ValidationType.None,則不會提供結構描述或 DTD 的資料型別資訊。

在呼叫 Close 方法之後,ReadTypedValue 方法會傳回 Null 參考。

下列程式碼範例會讀取並傳回 .NET Framework 型別物件。

Dim value as object = vr.ReadTypedValue()
[C#]
object value = vr.ReadTypedValue();

驗證型別

如果將 ValidationType 屬性值設定為 ValidationType.SchemaValidationType.XDR,就可找到資料型別資訊。如果是 ValidationType.DTDValidationType.None,則不會提供資料型別資訊。

在下列程式碼範例中,第一行會將 ValidationType 屬性設定來尋找 XML 結構描述 (XSD) 資料型別,而第二行會將 ValidationType 屬性設定來尋找 XDR 資料型別。

vr.ValidationType = ValidationType.Schema
vr.ValidationType = ValidationType.XDR
[C#]
vr.ValidationType = ValidationType.Schema;
vr.ValidationType = ValidationType.XDR;

請參閱

使用結構描述驗證 XML | XmlValidatingReader.SchemaType 屬性 | XmlValidatingReader.ReadTypedValue 方法