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

傳回

串接的文字內容或屬性值會轉換成所請求的類型。

例外狀況

內容格式不符合目標類型。

嘗試的演員陣容並不有效。

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 架構第二部分:資料型別 建議。

關於此方法的非同步版本,請參見 ReadContentAsAsync

適用於