XmlReader.ReadContentAs(Type, IXmlNamespaceResolver) 方法

定義

以指定型别的物件形式讀取內容。

public:
 virtual System::Object ^ ReadContentAs(Type ^ returnType, System::Xml::IXmlNamespaceResolver ^ namespaceResolver);
public virtual object ReadContentAs (Type returnType, System.Xml.IXmlNamespaceResolver namespaceResolver);
public virtual object ReadContentAs (Type returnType, System.Xml.IXmlNamespaceResolver? namespaceResolver);
abstract member ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
override this.ReadContentAs : Type * System.Xml.IXmlNamespaceResolver -> obj
Public Overridable Function ReadContentAs (returnType As Type, namespaceResolver As IXmlNamespaceResolver) As Object

參數

returnType
Type

要傳回的值型别。

注意:使用 .NET Framework 3.5 的版本時,returnType 參數的值現在可以是 DateTimeOffset 類型。

namespaceResolver
IXmlNamespaceResolver

IXmlNamespaceResolver 物件,用來解析任何與型別轉換相關的命名空間前置詞。 例如,將 XmlQualifiedName 物件轉換為 xs:string 時,可以使用它。

這個值可以是 null

傳回

Object

轉換為要求類型的串連文字內容或屬性值。

例外狀況

此內容的目標類型格式不正確。

嘗試的轉換無效。

returnType 值為 null

目前節點不是受支援的節點型別。 如需詳細資訊,請參閱下表。

-或-

在先前的非同步作業完成前呼叫了 XmlReader 方法。 在此情況下,會擲回 InvalidOperationException 與「非同步作業已經在進行中」的訊息。

讀取 Decimal.MaxValue

範例

下列範例會使用 方法, ReadContentAs 將 colors 元素的內容傳回字串物件的陣列。

using (XmlReader reader = XmlReader.Create("dataFile_2.xml")) {
      reader.ReadToDescendant("item");

      reader.MoveToAttribute("colors");
      string[] colors = (string[]) reader.ReadContentAs(typeof(string[]),null);
      foreach (string color in colors) {
         Console.WriteLine("Colors: {0}", color);
      }             		
}
Using reader As XmlReader = XmlReader.Create("dataFile_2.xml")

  reader.ReadToDescendant("item")
              
  reader.MoveToAttribute("colors")
  Dim colors As String() = CType(reader.ReadContentAs(GetType(String()), Nothing), String())
  Dim color As String
  For Each color In  colors
    Console.WriteLine("Colors: {0}", color)
  Next color
          
End Using

該範例使用 dataFile_2.xml 檔案做為輸入。

<root>
  <item sale-item='true' productID='123456' colors='blue green black'>
    <price>9.95</price>
  </item>
  <item sale-item='false' productID='124390'>
    <price>5.95</price>
  </item>
  <item sale-item='true' productID='53298'>
    <price>12.95</price>
  </item>
</root>

備註

這個方法會讀取目前讀取器位置的文字內容,並將它轉換成要求的傳回型別。 文字、泛空白字元、顯著泛空白字元及 CDATA 區段都是串連的。 註解和處理指示會略過,並且實體參考會自動進行解析。

此方法可用來讀取、視需要轉換,以及從目前節點內容傳回不可部分完成的值專案。 如果輸入類型是目前節點類型的有效對應,則會傳回包含目前節點值的目標型別實例。 如需預設對應的清單,請參閱參考頁面中的一節 XmlReader

例如,如果您有下列 XML 文字:

<elem>123 <!-- comment --> <?pi my_text?> 456 <?pi another_pi?></elem>

如果資料類型為 ,而且字串陣列會提供給 ReadContentAs 方法呼叫,則整數值會根據有效的 CLR 型別對應清單,從字串轉換。

如果資料不具類型,而且會將字串陣列提供給 ReadContentAs 方法呼叫,則會將內容剖析為不同的字串。 包含兩個字串的陣列會以值 「123」 和 「456」 傳回。 不會保留內容中的空格。

一般而言,讀取不具類型的資料時,內容會根據提供的型別進行剖析。 例如,如果將整數陣列提供給 ReadContentAs 方法呼叫,則會將字串剖析為整數 {123,456} 的陣列。

在下列範例中,XML 文字不會以空格分隔

<elem>123<!-- comment --><?pi my_text?>456789<?pi another_pi?></elem>

如果內容不具類型,且字串陣列會提供給 ReadContentAs 方法呼叫,則會傳回包含一個串連字號串的陣列,其值為 「123456789」。

下表描述此方法如何處理每個節點類型。

XmlNodeType 傳回值 讀取器行為
Text

CDATA

Whitespace

SignificantWhitespace

EntityReference

EndEntity
文字、CDATA、泛空白字元及顯著泛空白字元節點的串連內容會轉換為要求的型別。 移至下一個開始項目或結尾項目標記。 實體參考會自動展開。
Attribute 與在屬性值上呼叫 XmlConvert.ToXxx 相同。 讀取器會保持在目前位置。
Comment

ProcessingInstruction
忽略處理指示 (PI) 或註解,並讀取 PI 或註解後面的串連文字內容。 移至下一個開始項目或結尾項目標記。 實體參考會自動展開。
EndElement 空字串。 讀取器會保持在目前位置。
Element

XmlDeclaration

None

Document

DocumentType

Notation

Entity

DocumentFragment
擲回 InvalidOperationException 未定義 (但讀取器通常會保持在目前位置)。

如需詳細資訊,請參閱參考頁面的 XmlReader 一節和 W3C XML 架構第 2 部分:資料類型 建議。

如需這個方法的非同步版本,請參閱 ReadContentAsAsync

適用於