存取結構描述型別資訊
您可使用 SchemaType 屬性存取結構描述型別資訊。SchemaType 屬性會根據值是內建 XML 結構描述定義語言 (XSD) 型別,或是使用者定義型別 (例如 simpleType 或 complexType),傳回 XmlSchemaType 或 XmlSchemaDataType 任何一個。
檢查傳回型別
您可使用 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) 結構描述驗證,XmlSchemaType 或 XmlSchemaDataType 會對應至正在讀取的目前項目。
如果目前項目或屬性是簡單型別,會傳回 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) 驗證,XmlSchemaType 或 XmlSchemaDataType 會傳回 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.Schema 或 ValidationType.XDR,就可找到資料型別資訊。如果是 ValidationType.DTD 或 ValidationType.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 方法