XmlReader 類別

定義

表示提供快速、非快取、順向 (Forward-only) 存取 XML 資料的讀取器 (Reader)。

public ref class XmlReader abstract : IDisposable
public ref class XmlReader abstract
public abstract class XmlReader : IDisposable
public abstract class XmlReader
type XmlReader = class
    interface IDisposable
type XmlReader = class
Public MustInherit Class XmlReader
Implements IDisposable
Public MustInherit Class XmlReader
繼承
XmlReader
衍生
實作

範例

下列範例程式碼示範如何使用非同步 API 來剖析 XML。

async Task TestReader(System.IO.Stream stream)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Async = true;

    using (XmlReader reader = XmlReader.Create(stream, settings))
    {
        while (await reader.ReadAsync())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.WriteLine("Start Element {0}", reader.Name);
                    break;
                case XmlNodeType.Text:
                    Console.WriteLine("Text Node: {0}",
                             await reader.GetValueAsync());
                    break;
                case XmlNodeType.EndElement:
                    Console.WriteLine("End Element {0}", reader.Name);
                    break;
                default:
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value);
                    break;
            }
        }
    }
}
Public Async Function TestReader(stream As System.IO.Stream) As Task
    Dim settings As New XmlReaderSettings()
    settings.Async = True

    Using reader As XmlReader = XmlReader.Create(stream, settings)
        While (Await reader.ReadAsync())
            Select Case (reader.NodeType)
                Case XmlNodeType.Element
                    Console.WriteLine("Start Element {0}", reader.Name)
                Case XmlNodeType.Text
                    Console.WriteLine("Text Node: {0}",
                             Await reader.GetValueAsync())
                Case XmlNodeType.EndElement
                    Console.WriteLine("End Element {0}", reader.Name)
                Case Else
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value)
            End Select
        End While
    End Using
End Function

備註

XmlReader 提供檔或資料流程中 XML 資料的順向唯讀存取。 此類別符合 W3C Extensible Markup Language (XML) 1.0 (第四版) ,以及 XML 1.0 (第三版) 建議中的命名空間

XmlReader 方法可讓您移動 XML 資料,並讀取節點的內容。 類別的屬性會反映目前節點的值,也就是讀取器的位置。 ReadState屬性值表示 XML 讀取器的目前狀態。 例如,屬性是由 方法和 ReadState.Closed 方法設定為 。 ReadState.Initial XmlReader.Close XmlReader.Read XmlReader 也提供 DTD 或架構的資料一致性檢查和驗證。

XmlReader 會使用提取模型來擷取資料。 此模型:

  • 透過自然、由上而下的程式精簡來簡化狀態管理。

  • 支援多個輸入資料流程和分層。

  • 可讓用戶端為剖析器提供直接寫入字串的緩衝區,因而避免需要額外的字串複製。

  • 支援選擇性處理。 用戶端可以略過專案並處理應用程式感興趣的專案。 您也可以事先設定屬性來管理 XML 資料流程的處理方式 (,例如正規化) 。

本節內容:

建立 XML 讀取器 驗證 XML 資料 資料一致性 流覽節點 讀取 XML 元素 讀取 XML 屬性 讀取 XML 內容 轉換成 CLR 類型 非同步程式設計 安全性考慮

建立 XML 讀取器

Create使用 方法來建立 XmlReader 實例。

雖然.NET Framework提供類別的具體實 XmlReader 作,例如 XmlTextReaderXmlNodeReaderXmlValidatingReader 類別,但我們建議您只在這些案例中使用特製化類別:

  • 當您想要從 XmlNode 物件讀取 XML DOM 子樹時,請使用 XmlNodeReader 類別。 不過, (這個類別不支援 DTD 或架構驗證。)

  • 如果您必須依要求展開實體,則不想將文字內容正規化,或不想傳回預設屬性,請使用 XmlTextReader 類別。

若要指定您想要在 XML 讀取器上啟用的功能集,請將 物件傳遞 System.Xml.XmlReaderSettingsCreate 方法。 您可以使用單 System.Xml.XmlReaderSettings 一物件來建立具有相同功能的多個讀取器,或修改 System.Xml.XmlReaderSettings 物件,以建立具有不同功能集的新讀取器。 您也可以輕鬆地將功能新增至現有的讀取器。

如果您沒有使用 System.Xml.XmlReaderSettings 物件,則會使用預設設定。 如需詳細資訊, Create 請參閱參考頁面。

XmlReader 在 XML 剖析錯誤上擲回 XmlException 。 擲回例外狀況之後,讀取器的狀態無法預測。 例如,回報的節點類型可能與目前節點的實際節點類型不同。 ReadState使用 屬性來檢查讀取器是否處於錯誤狀態。

驗證 XML 資料

若要定義 XML 檔的結構及其專案關聯性、資料類型和內容條件約束,您可以使用檔案類型定義 (DTD) 或 XML 架構定義語言 (XSD) 架構。 如果 XML 檔符合 W3C XML 1.0 建議所定義的所有語法需求,則會將其視為格式良好。 如果格式正確,而且也符合其 DTD 或架構所定義的條件約束,則會將其視為有效。 (請參閱 W3C XML 架構第 1 部分:結構和 W3C XML 架構第 2 部分:資料類型 建議。) 因此,雖然所有有效的 XML 檔案格式良好,但並非所有格式正確的 XML 檔都是有效的。

您可以根據 DTD、內嵌 XSD 架構或儲存在物件中的 XmlSchemaSet XSD 架構來驗證資料, (快取) ;這些案例會在參考頁面上描述 CreateXmlReader 不支援XML-Data精簡 (XDR) 架構驗證。

您可以在 類別上使用 XmlReaderSettings 下列設定來指定實例所支援的驗證 XmlReader 類型。

XmlReaderSettings使用此成員 若要指定
DtdProcessing 屬性 是否允許 DTD 處理。 預設不允許 DTD 處理。
ValidationType 屬性 讀取器是否應該驗證資料,以及要執行 (DTD 或架構) 的驗證類型。 預設不進行資料驗證。
ValidationEventHandler 事件 接收驗證事件相關資訊的事件處理常式。 如果未提供事件處理常式,會在第一次發生驗證錯誤時擲回 XmlException
ValidationFlags 屬性 透過 XmlSchemaValidationFlags 列舉成員的其他驗證選項:

- AllowXmlAttributes-- 即使在架構中未定義 XML 屬性,仍允許在實例檔中 (xml:*) 。 會根據屬性的資料型別來驗證該屬性。 XmlSchemaValidationFlags如需在特定案例中使用的設定,請參閱參考頁面。 預設 (停用。)
- ProcessIdentityConstraints --在驗證期間遇到 (xs:IDxs:IDREFxs:keyxs:keyref xs:unique) 的身分識別條件約束。 預設 (啟用。)
- ProcessSchemaLocation--處理 或 xsi:noNamespaceSchemaLocation 屬性所 xsi:schemaLocation 指定的架構。 預設 (啟用。)
- ProcessInlineSchema-- 在驗證期間處理內嵌 XML 架構。 預設 (停用。)
- ReportValidationWarnings--如果發生驗證警告,請回報事件。 在沒有可以用於驗證特定項目或屬性的 DTD 或 XML 結構描述時,通常會發出警告。 會使用 ValidationEventHandler 來進行通知。 預設 (停用。)
Schemas 用來驗證的 XmlSchemaSet
XmlResolver 屬性 XmlResolver用於解析和存取外部資源的 。 這可以包含外部實體,例如 DTD 和架構,以及 XML 架構中包含的任何 xs:includexs:import 專案。 如果您未指定 XmlResolver ,則會 XmlReader 使用不含使用者認證的預設值 XmlUrlResolver

資料一致性

由 方法建立 Create 的 XML 讀取器預設符合下列合規性需求:

  • 新的行和屬性值會根據 W3C XML 1.0 建議正規化。

  • 所有實體都會自動展開。

  • 即使讀取器未驗證,也一律會新增在檔案類型定義中宣告的預設屬性。

  • 允許對應至正確 XML 命名空間 URI 的 XML 前置詞宣告。

  • NotationType 一屬性宣告和 NmTokensEnumeration 一屬性宣告中的標記法名稱是相異的。

XmlReaderSettings使用這些屬性來指定您想要啟用的一致性檢查類型:

使用此屬性 XmlReaderSettings 收件者 預設
CheckCharacters 屬性 啟用或停用下列專案的檢查:

- 字元在合法 XML 字元的範圍內,如 W3C XML 1.0 建議的 2.2 個字元 區段所定義。
- 所有 XML 名稱都是有效的,如 W3C XML 1.0 建議的 2.3 通用語法建構 一節所定義。

當此屬性設定為 true (預設) 時, XmlException 如果 XML 檔案包含不合法的字元或不正確 XML 名稱 (,例如,元素名稱開頭為數字) ,則會擲回例外狀況。
已啟用字元和名稱檢查。

CheckCharacters 設為 false 會關閉字元實體參考的字元檢查。 如果讀取器正在處理文字資料,它一律會檢查 XML 名稱是否有效,而不論此設定為何。 注意: 當 DTD 存在時,XML 1.0 建議需要檔層級一致性。 因此,如果讀取器設定為支援 ConformanceLevel.Fragment ,但 XML 資料包含檔案類型定義 (DTD) , XmlException 則會擲回 。
ConformanceLevel 屬性 選擇要強制執行的一致性層級:

- Document. 符合 格式正確的 XML 1.0 檔規則。
- Fragment. 符合格式正確的檔片段規則,這些片段可以當做 外部剖析實體使用。
- Auto. 符合讀取器決定的層級。

如果資料不符合規範, XmlException 則會擲回例外狀況。
Document

目前的節點是 XML 讀取器目前所在的 XML 節點。 所有 XmlReader 方法都會執行與這個節點相關的作業,而所有屬性都會 XmlReader 反映目前節點的值。

下列方法可讓您輕鬆地流覽節點並剖析資料。

使用此方法 XmlReaderSettings 收件者
Read 讀取第一個節點,並逐一流覽資料流程一個節點。 這類呼叫通常會在迴圈內 while 執行。

NodeType使用 屬性可取得類型 (,例如,屬性、批註、元素等等,) 目前節點。
Skip 略過目前節點的子系,並移至下一個節點。
MoveToContentMoveToContentAsync 略過非內容節點,並移至下一個內容節點或檔案結尾。

非內容節點包括 ProcessingInstructionDocumentTypeCommentWhitespaceSignificantWhitespace

內容節點包含非空白字元文字、 CDATAEntityReferenceEndEntity
ReadSubtree 讀取專案及其所有子系,並傳回設定為 ReadState.Initial 的新 XmlReader 實例。

這個方法適用于建立 XML 元素周圍的界限;例如,如果您想要將資料傳遞至另一個元件進行處理,而且您想要限制元件可以存取的資料量。

XmlReader.Read如需一次流覽一個節點的文字串流範例,並顯示每個節點的類型,請參閱參考頁面。

下列各節說明如何讀取特定類型的資料,例如元素、屬性和具型別資料。

讀取 XML 元素

下表列出 類別提供處理專案的方法和屬性 XmlReader 。 將 XmlReader 定位於項目上後,節點屬性 (如 Name) 就會反映項目值。 除了下面說明的成員之外,還可以使用 XmlReader 類別的任意一般方法及屬性來處理項目。 例如,您可以使用 ReadInnerXml 方法讀取項目的內容。

注意

請參閱 W3C XML 1.0 建議的第 3.1 節,以取得開始標記、結束標記和空白元素標記的定義。

XmlReader使用此成員 收件者
IsStartElement 方法 檢查目前的節點是否為開始標記或空白元素標記。
ReadStartElement 方法 檢查目前的節點是否為元素,並將讀取器前進到下一個節點, (呼叫 IsStartElement 後面接著 Read) 。
ReadEndElement 方法 檢查目前的節點是否為結束標籤,並將讀取器前進到下一個節點。
ReadElementString 方法 讀取僅限文字的專案。
ReadToDescendant 方法 將 XML 讀取器前進到下一個子代 (具有指定名稱的子系) 元素。
ReadToNextSibling 方法 將 XML 讀取器前進到下一個具有指定名稱的同層級專案。
IsEmptyElement 屬性 檢查目前專案是否有結束專案標籤。 例如:

- <item num="123"/>IsEmptyElement (為 true .)
- <item num="123"> </item>IsEmptyElement (為 false ,雖然元素的內容是 empty.)

如需讀取元素文字內容的範例,請參閱 ReadString 方法。 下列範例會使用 while 迴圈來處理專案。

while (reader.Read()) {
  if (reader.IsStartElement()) {
    if (reader.IsEmptyElement)
                {
                    Console.WriteLine("<{0}/>", reader.Name);
                }
                else {
      Console.Write("<{0}> ", reader.Name);
      reader.Read(); // Read the start tag.
      if (reader.IsStartElement())  // Handle nested elements.
        Console.Write("\r\n<{0}>", reader.Name);
      Console.WriteLine(reader.ReadString());  //Read the text content of the element.
    }
  }
}
While reader.Read()
  If reader.IsStartElement() Then
    If reader.IsEmptyElement Then
      Console.WriteLine("<{0}/>", reader.Name)
    Else
      Console.Write("<{0}> ", reader.Name)
      reader.Read() ' Read the start tag.
      If reader.IsStartElement() Then ' Handle nested elements.
        Console.Write(vbCr + vbLf + "<{0}>", reader.Name)
      End If
      Console.WriteLine(reader.ReadString()) 'Read the text content of the element.
    End If
  End If
End While

讀取 XML 屬性

XML 屬性最常在元素上找到,但 XML 宣告和檔案類型節點上也允許這些屬性。

在專案節點上定位時, MoveToAttribute 方法可讓您流覽元素的屬性清單。 請注意,在呼叫 之後 MoveToAttribute ,節點屬性,例如 NameNamespaceURI 和 會 Prefix 反映該屬性的屬性,而不是屬性所屬元素的屬性。

類別 XmlReader 會提供這些方法和屬性,以讀取和處理專案上的屬性。

XmlReader使用此成員 收件者
HasAttributes 屬性 檢查目前節點是否有任何屬性。
AttributeCount 屬性 取得目前專案上的屬性數目。
MoveToFirstAttribute 方法 移至 專案中的第一個屬性。
MoveToNextAttribute 方法 移至 元素中的下一個屬性。
MoveToAttribute 方法 移至指定的屬性。
GetAttribute 方法或 Item[] 屬性 取得指定屬性的值。
IsDefault 屬性 檢查目前節點是否為從 DTD 或架構中定義的預設值產生的屬性。
MoveToElement 方法 移至擁有目前屬性的專案。 使用這個方法在巡覽其屬性之後返回元素。
ReadAttributeValue 方法 將屬性值剖析成一或多個 TextEntityReferenceEndEntity 節點。

任何一般 XmlReader 方法和屬性都可用於處理屬性 (Attribute)。 例如,將 XmlReader 置於屬性 (Attribute) 上之後,NameValue 屬性會反映屬性 (Attribute) 的值。 您還可使用任何內容 Read 方法,以取得屬性的值。

這個範例會 AttributeCount 使用 屬性來巡覽專案上的所有屬性。

// Display all attributes.
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  for (int i = 0; i < reader.AttributeCount; i++) {
    Console.WriteLine("  {0}", reader[i]);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}
' Display all attributes.
If reader.HasAttributes Then
  Console.WriteLine("Attributes of <" + reader.Name + ">")
  Dim i As Integer
  For i = 0 To (reader.AttributeCount - 1)
    Console.WriteLine("  {0}", reader(i))
  Next i
  ' Move the reader back to the element node.
  reader.MoveToElement() 
End If

這個範例會 MoveToNextAttribute 使用 迴圈中的 while 方法來巡覽屬性。

if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  while (reader.MoveToNextAttribute()) {
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}
If reader.HasAttributes Then
  Console.WriteLine("Attributes of <" + reader.Name + ">")
  While reader.MoveToNextAttribute()
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value)
  End While
  ' Move the reader back to the element node.
  reader.MoveToElement()
End If

讀取 XML 宣告節點上的屬性

當 XML 讀取器位於 XML 宣告節點上時, Value 屬性會以單一字串的形式傳回版本、獨立和編碼資訊。 XmlReader方法、 XmlTextReader 類別和 XmlValidatingReader 類別所 Create 建立的物件會將版本、獨立和編碼專案公開為屬性。

讀取檔案類型節點上的屬性

當 XML 讀取器位於檔案類型節點上時, GetAttribute 可以使用 方法和 Item[] 屬性來傳回 SYSTEM 和 PUBLIC 常值的值。 例如,呼叫 reader.GetAttribute("PUBLIC") 會傳回 PUBLIC 值。

讀取處理指示節點上的屬性

XmlReader 置於處理指示節點時,Value 屬性會傳回全部文字內容。 處理指示節點中的專案不會被視為屬性。 無法使用 或 MoveToAttribute 方法讀取 GetAttribute 它們。

讀取 XML 內容

XmlReader 類別包含下列成員,這些成員會從 XML 檔案讀取內容,並將內容傳回為字串值。 (若要傳回 CLR 類型,請參閱 下一節。)

XmlReader使用此成員 收件者
Value 屬性 取得目前節點的文字內容。 傳回的值取決於節點類型;如需詳細資訊, Value 請參閱參考頁面。
ReadString 方法 取得專案或文位元組點的內容做為字串。 這個方法會在處理指示和批註時停止。

如需此方法如何處理特定節點類型的詳細資訊,請參閱 ReadString 參考頁面。
ReadInnerXmlReadInnerXmlAsync 方法 取得目前節點的所有內容,包括標記,但不包括開始和結束標籤。 例如,針對:

<node>this<child id="123"/></node>

ReadInnerXml 返回:

this<child id="123"/>
ReadOuterXmlReadOuterXmlAsync 方法 取得目前節點及其子系的所有內容,包括標記和開始/結束標籤。 例如,針對:

<node>this<child id="123"/></node>

ReadOuterXml 返回:

<node>this<child id="123"/></node>

轉換成 CLR 類型

您可以使用下表所列類別 XmlReader 的成員 () 讀取 XML 資料,並將值當做 Common Language Runtime (CLR) 類型,而不是字串。 這些成員可讓您在表示中取得最適合編碼工作的值,而不需要手動剖析或轉換字串值。

  • ReadElementContentAs 方法只能在專案節點類型上呼叫。 這些方法無法用於包含項目子系或混合內容的項目。 呼叫後,XmlReader 物件會讀取開始標記、讀取項目內容,然後移動到超過結尾項目標記以後的部分。 處理指示及註解會略過,並且實體會展開。

  • ReadContentAs 方法會讀取目前讀取器位置的文字內容,如果 XML 資料沒有任何與其相關聯的架構或資料類型資訊,請將文字內容轉換成要求的傳回型別。 文字、泛空白字元、顯著泛空白字元及 CDATA 區段都是串連的。 會略過批註和處理指示,而且會自動解析實體參考。

類別 XmlReader 使用 W3C XML 架構第 2 部分:資料類型 建議所定義的規則。

使用此方法 XmlReader 傳回此 CLR 類型
ReadContentAsBooleanReadElementContentAsBoolean Boolean
ReadContentAsDateTimeReadElementContentAsDateTime DateTime
ReadContentAsDoubleReadElementContentAsDouble Double
ReadContentAsLongReadElementContentAsLong Int64
ReadContentAsIntReadElementContentAsInt Int32
ReadContentAsStringReadElementContentAsString String
ReadContentAsReadElementContentAs 您使用 參數指定的 returnType 類型
ReadContentAsObjectReadElementContentAsObject 最適當的類型,如 屬性所 XmlReader.ValueType 指定。 如需對應資訊,請參閱 System.Xml類別中的類型支援

如果專案因為其格式而無法輕易轉換成 CLR 類型,您可以使用架構對應來確保轉換成功。 下列範例會使用 .xsd 檔案將專案 xs:date 轉換成 hire-date 型別,然後使用 ReadElementContentAsDateTime 方法將專案傳回為 DateTime 物件。

輸入 (hireDate.xml) :

<employee xmlns="urn:empl-hire">
    <ID>12365</ID>
    <hire-date>2003-01-08</hire-date>
    <title>Accountant</title>
</employee>

架構 (hireDate.xsd) :

<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:empl-hire" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ID" type="xs:unsignedShort" />
        <xs:element name="hire-date" type="xs:date" />
        <xs:element name="title" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

代碼:

// Create a validating XmlReader object. The schema
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {

  // Move to the hire-date element.
  reader.MoveToContent();
  reader.ReadToDescendant("hire-date");

  // Return the hire-date as a DateTime object.
  DateTime hireDate = reader.ReadElementContentAsDateTime();
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}
' Create a validating XmlReader object. The schema 
' provides the necessary type information.
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd")
Using reader As XmlReader = XmlReader.Create("hireDate.xml", settings) 
  ' Move to the hire-date element.
  reader.MoveToContent()
  reader.ReadToDescendant("hire-date")

  ' Return the hire-date as a DateTime object.
  Dim hireDate As DateTime = reader.ReadElementContentAsDateTime()
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6))
End Using

輸出:

Six Month Review Date:  7/8/2003 12:00:00 AM

非同步程式設計

大部分 XmlReader 的方法都有在方法名稱結尾具有 「Async」 的非同步對應專案。 例如,的 ReadContentAsObject 非同步對等專案是 ReadContentAsObjectAsync

下列方法可以搭配非同步方法呼叫使用:

下列各節說明沒有非同步對應專案之方法的非同步用法。

ReadStartElement 方法

public static async Task ReadStartElementAsync(this XmlReader reader, string localname, string ns)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.Element)
    {
        throw new InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType");
    }
    if ((reader.LocalName == localname) && (reader.NamespaceURI == ns))
    {
        await reader.ReadAsync();
    }
    else
    {
        throw new InvalidOperationException("localName or namespace doesn’t match");
    }
}
<Extension()>
Public Async Function ReadStartElementAsync(reader As XmlReader, localname As String, ns As String) As Task
    If (Await reader.MoveToContentAsync() <> XmlNodeType.Element) Then
        Throw New InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType")
    End If

    If ((reader.LocalName = localname) And (reader.NamespaceURI = ns)) Then
        Await reader.ReadAsync()
    Else
        Throw New InvalidOperationException("localName or namespace doesn’t match")
    End If
End Function

ReadEndElement 方法

public static async Task ReadEndElementAsync(this XmlReader reader)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.EndElement)
    {
        throw new InvalidOperationException();
    }
    await reader.ReadAsync();
}
<Extension()>
Public Async Function ReadEndElementAsync(reader As XmlReader) As task
    If (Await reader.MoveToContentAsync() <> XmlNodeType.EndElement) Then
        Throw New InvalidOperationException()
    End If
    Await reader.ReadAsync()
End Function

ReadToNextSibling 方法

public static async Task<bool> ReadToNextSiblingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the next sibling
    XmlNodeType nt;
    do
    {
        await reader.SkipAsync();
        if (reader.ReadState != ReadState.Interactive)
            break;
        nt = reader.NodeType;
        if (nt == XmlNodeType.Element &&
             ((object)localName == (object)reader.LocalName) &&
             ((object)namespaceURI ==(object)reader.NamespaceURI))
        {
            return true;
        }
    } while (nt != XmlNodeType.EndElement && !reader.EOF);
    
    return false;
}
<Extension()>
Public Async Function ReadToNextSiblingAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
    If (localName = Nothing Or localName.Length = 0) Then
        Throw New ArgumentException("localName is empty or null")
    End If

    If (namespaceURI = Nothing) Then
        Throw New ArgumentNullException("namespaceURI")
    End If

    ' atomize local name and namespace
    localName = reader.NameTable.Add(localName)
    namespaceURI = reader.NameTable.Add(namespaceURI)

    ' find the next sibling
    Dim nt As XmlNodeType
    Do

        Await reader.SkipAsync()
        If (reader.ReadState <> ReadState.Interactive) Then
            Exit Do
        End If
        nt = reader.NodeType
        If ((nt = XmlNodeType.Element) And
           ((CObj(localName) = CObj(reader.LocalName))) And
           (CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
            Return True
        End If
    Loop While (nt <> XmlNodeType.EndElement And (Not reader.EOF))

    Return False

End Function

ReadToFollowing 方法

public static async Task<bool> ReadToFollowingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find element with that name
    while (await reader.ReadAsync())
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}
<Extension()>
Public Async Function ReadToFollowingAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
    If (localName = Nothing Or localName.Length = 0) Then
        Throw New ArgumentException("localName is empty or null")
    End If

    If (namespaceURI = Nothing) Then
        Throw New ArgumentNullException("namespaceURI")
    End If

    ' atomize local name and namespace
    localName = reader.NameTable.Add(localName)
    namespaceURI = reader.NameTable.Add(namespaceURI)

    ' find element with that name
    While (Await reader.ReadAsync())
        If ((reader.NodeType = XmlNodeType.Element) And
           (CObj(localName) = CObj(reader.LocalName)) And
           (CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
            Return True
        End If
    End While

    Return False
End Function

ReadToDescendant 方法

public static async Task<bool> ReadToDescendantAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }
    // save the element or root depth
    int parentDepth = reader.Depth;
    if (reader.NodeType != XmlNodeType.Element)
    {
        // adjust the depth if we are on root node
        if (reader.ReadState == ReadState.Initial)
        {
            parentDepth--;
        }
        else
        {
            return false;
        }
    }
    else if (reader.IsEmptyElement)
    {
        return false;
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the descendant
    while (await reader.ReadAsync() && reader.Depth > parentDepth)
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}
<Extension()>
Public Async Function ReadToDescendantAsync(reader As XmlReader, localName As String, namespaceURI As String) As Task(Of Boolean)
    If (localName = Nothing Or localName.Length = 0) Then
        Throw New ArgumentException("localName is empty or null")
    End If

    If (namespaceURI = Nothing) Then
        Throw New ArgumentNullException("namespaceURI")
    End If

    ' save the element or root depth
    Dim parentDepth As Integer = reader.Depth
    If (reader.NodeType <> XmlNodeType.Element) Then
        ' adjust the depth if we are on root node
        If (reader.ReadState = ReadState.Initial) Then
            parentDepth -= 1
        Else
            Return False
        End If
    ElseIf (reader.IsEmptyElement) Then
        Return False
    End If
    ' atomize local name and namespace
    localName = reader.NameTable.Add(localName)
    namespaceURI = reader.NameTable.Add(namespaceURI)

    ' find the descendant
    While (Await reader.ReadAsync() And reader.Depth > parentDepth)
        If (reader.NodeType = XmlNodeType.Element And
           (CObj(localName) = CObj(reader.LocalName)) And
           (CObj(namespaceURI) = CObj(reader.NamespaceURI))) Then
            Return True
        End If
    End While

    Return False
End Function

安全性考量

使用 類別時, XmlReader 請考慮下列事項:

  • 從 擲回的 XmlReader 例外狀況可能會揭露您可能不想要反升至應用程式的路徑資訊。 您的應用程式必須攔截例外狀況,並適當地處理它們。

  • 如果您擔心拒絕服務問題,或正在處理不受信任的來源,請勿啟用 DTD 處理。 預設 XmlReader 會針對 方法所 Create 建立的物件停用 DTD 處理。

    如果已啟用 DTD 處理,則可使用 XmlSecureResolver 限制 XmlReader 可存取的資源。 您也可以設計應用程式,讓 XML 處理受到記憶體和時間限制。 例如,您可以在 ASP.NET 應用程式中設定逾時限制。

  • XML 資料可以包括外部資源的參考,如結構描述檔案。 根據預設,外部資源會使用 XmlUrlResolver 沒有使用者認證的 物件來解析。 您可以透過執行下列其中一項作業,進一步保護它:

  • ProcessInlineSchema預設不會設定 物件的 和 ProcessSchemaLocation 驗證旗標 XmlReaderSettings 。 在處理來自不受信任來源的 XML 資料時,這有助於保護 XmlReader,防止其遭受以結構描述為基礎的攻擊。 當設定這些旗標時,XmlResolver 物件的 XmlReaderSettings 可用於解析在 XmlReader 的執行個體文件中發現的結構描述位置。 XmlResolver如果 屬性設定 null 為 ,即使 ProcessInlineSchema 已設定 和 ProcessSchemaLocation 驗證旗標,架構位置也不會解析。

    驗證期間加入的結構描述會加入新型別,並可變更要驗證之物件的驗證結果。 因此,外部結構描述應僅從受信任的來源解析。

    針對在檔中大部分具有身分識別條件約束的架構,在高可用性案例中驗證不受信任的大型 XML 檔時,建議您停用 ProcessIdentityConstraints 旗標。 預設會啟用此旗標。

  • XML 資料可以包含需要相當長時間來處理的大量屬性、命名空間宣告、巢狀項目等。 若要限制傳送至 XmlReader 的輸入大小,您可以:

  • 方法 ReadValueChunk 可用來處理大型資料流程。 此方法每次會讀取較少數量的字元,而不是為整個值配置單一字串。

  • 讀取具有大量唯一本機名稱、命名空間或前置詞的 XML 檔時,可能會發生問題。 如果您使用衍生自 XmlReader 的類別,而且您呼叫 LocalName 每個專案的 、 PrefixNamespaceURI 屬性,則會將傳回的字串新增至 NameTable 。 所保留的 NameTable 集合永遠不會減少大小,建立字串控制碼的虛擬記憶體流失。 其中一個緩和措施是衍生自 NameTable 類別,並強制執行大小上限配額。 (沒有辦法防止使用 NameTable ,或是在完整) 時切換 NameTable 。 另一個緩和措施是避免使用提及的屬性,而是盡可能使用 MoveToAttribute 方法搭配 IsStartElement 方法;這些方法不會傳回字串,因而避免過度填滿 NameTable 集合的問題。

  • XmlReaderSettings 物件可以包含機密資訊 (如使用者認證)。 不受信任的元件可能會使用 XmlReaderSettings 物件及其使用者認證,建立 XmlReader 物件來讀取資料。 快取 XmlReaderSettings 物件時,或將物件從某個元件傳遞 XmlReaderSettings 至另一個元件時,請小心。

  • 請不要接受來自不受信任來源的支援元件,如 NameTableXmlNamespaceManagerXmlResolver 物件。

建構函式

XmlReader()

初始化 XmlReader 類別的新執行個體。

屬性

AttributeCount

在衍生類別中覆寫時,取得目前節點上的屬性數目。

BaseURI

在衍生類別中覆寫時,取得目前節點的基底 URI。

CanReadBinaryContent

取得值,這個值表示 XmlReader 是否會實作二進位內容讀取方法。

CanReadValueChunk

取得值,表示 XmlReader 是否會實作 ReadValueChunk(Char[], Int32, Int32) 方法。

CanResolveEntity

取得值,指出這個讀取器是否可以剖析和解析實體。

Depth

在衍生類別中覆寫時,取得 XML 文件中目前節點的深度。

EOF

在衍生類別中覆寫時,取得指出讀取器是否在資料流結尾的值。

HasAttributes

取得值,表示目前節點是否具有任何屬性。

HasValue

在衍生類別中覆寫時,取得指出目前節點是否具有 Value 的值。

IsDefault

在衍生類別中覆寫時,取得值,指出目前節點是否為從 DTD 或結構描述中定義的預設值產生的屬性。

IsEmptyElement

在衍生類別中覆寫時,取得指出目前節點是否為空項目的值 (例如 <MyElement/>)。

Item[Int32]

在衍生類別中覆寫時,取得具有指定索引的屬性值。

Item[String, String]

在衍生類別中覆寫時,取得具有指定 LocalNameNamespaceURI 的屬性值。

Item[String]

在衍生類別中覆寫時,取得具有指定 Name 的屬性值。

LocalName

在衍生類別中覆寫時,取得目前節點的區域名稱。

Name

在衍生類別中覆寫時,取得目前節點的限定名稱。

NamespaceURI

在衍生類別中覆寫時,取得讀取器所在節點的命名空間 URI (如 W3C 命名空間規格中所定義)。

NameTable

在衍生類別中覆寫時,取得與這個實作相關聯的 XmlNameTable

NodeType

在衍生類別中覆寫時,取得目前節點的類型。

Prefix

在衍生類別中覆寫時,取得與目前節點相關聯的命名空間前置詞。

QuoteChar

在衍生類別中覆寫時,取得用來括住屬性節點值的引號字元。

ReadState

在衍生類別中覆寫時,取得讀取器的狀態。

SchemaInfo

取得在結構描述驗證之後已指派給目前節點的結構描述資訊。

Settings

取得 XmlReaderSettings 物件,用於建立這個 XmlReader 執行個體。

Value

在衍生類別中覆寫時,取得目前節點的文字值。

ValueType

取得目前節點的 Common Language Runtime (CLR) 型別。

XmlLang

當在衍生類別中覆寫時,取得目前xml:lang範圍。

XmlSpace

當在衍生類別中覆寫時,取得目前xml:space範圍。

方法

Close()

在衍生類別中覆寫時,將 ReadState 變更為 Closed

Create(Stream)

使用指定的資料流,以預設設定建立新的 XmlReader 執行個體。

Create(Stream, XmlReaderSettings)

使用指定的資料流及設定,建立新的 XmlReader

Create(Stream, XmlReaderSettings, String)

使用指定的資料流、基底 URI 和設定,建立新的 XmlReader 執行個體。

Create(Stream, XmlReaderSettings, XmlParserContext)

使用剖析用的指定資料流、設定和內容資訊,建立新的 XmlReader 執行個體。

Create(String)

使用指定的 URI,建立新的 XmlReader 執行個體。

Create(String, XmlReaderSettings)

使用指定的 URI 和設定,建立新的 XmlReader 執行個體。

Create(String, XmlReaderSettings, XmlParserContext)

使用剖析用的指定 URI、設定和內容資訊,建立新的 XmlReader 執行個體。

Create(TextReader)

使用指定的文字讀取器,建立新的 XmlReader 執行個體。

Create(TextReader, XmlReaderSettings)

使用指定的文字讀取器及設定,建立新的 XmlReader 執行個體。

Create(TextReader, XmlReaderSettings, String)

使用指定的文字讀取器、設定和基底 URI,建立新的 XmlReader 執行個體。

Create(TextReader, XmlReaderSettings, XmlParserContext)

使用指定的文字讀取器、設定和內容資訊進行剖析,建立新的 XmlReader 執行個體。

Create(XmlReader, XmlReaderSettings)

使用指定的 XML 讀取器和設定,建立新的 XmlReader 執行個體。

Dispose()

釋放 XmlReader 類別目前的執行個體所使用的全部資源。

Dispose(Boolean)

釋放 XmlReader 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetAttribute(Int32)

在衍生類別中覆寫時,取得具有指定索引的屬性值。

GetAttribute(String)

在衍生類別中覆寫時,取得具有指定 Name 的屬性值。

GetAttribute(String, String)

在衍生類別中覆寫時,取得具有指定 LocalNameNamespaceURI 的屬性值。

GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
GetValueAsync()

非同步取得目前節點的值。

IsName(String)

傳回值,指出字串引數是否為有效的 XML 名稱。

IsNameToken(String)

傳回值,指出字串引數是否為有效的 XML 名稱語彙基元。

IsStartElement()

呼叫 MoveToContent() 並測試目前的內容節點為開頭標記或空白項目標記。

IsStartElement(String)

呼叫 MoveToContent() 並測試目前的內容節點為開頭標記或空白項目標記,以及所找到項目的 Name 屬性是否符合指定的引數。

IsStartElement(String, String)

呼叫 MoveToContent() 並測試目前的內容節點為開頭標記或空白項目標記,以及所找到項目的 LocalNameNamespaceURI 屬性是否符合指定的字串。

LookupNamespace(String)

在衍生類別中覆寫時,解析目前項目範圍內的命名空間前置詞。

MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
MoveToAttribute(Int32)

在衍生類別中覆寫時,移至具有指定索引的屬性。

MoveToAttribute(String)

在衍生類別中覆寫時,移至具有指定 Name 的屬性。

MoveToAttribute(String, String)

在衍生類別中覆寫時,移至具有指定 LocalNameNamespaceURI 的屬性。

MoveToContent()

檢查目前節點是否為內容 (非空白字元文字、CDATAElementEndElementEntityReferenceEndEntity) 節點。 如果節點並非內容節點,讀取器會先跳至下一個內容節點或檔案結尾。 它會略過下列型別的節點:ProcessingInstructionDocumentTypeCommentWhitespaceSignificantWhitespace

MoveToContentAsync()

非同步檢查目前節點是否為內容節點。 如果節點並非內容節點,讀取器會先跳至下一個內容節點或檔案結尾。

MoveToElement()

在衍生類別中覆寫時,移至包含目前屬性節點的項目上。

MoveToFirstAttribute()

在衍生類別中覆寫時,移至第一個屬性。

MoveToNextAttribute()

在衍生類別中覆寫時,移至下一個屬性。

Read()

在衍生類別中覆寫時,從資料流讀取下一個節點。

ReadAsync()

非同步讀取資料流中的下一個節點。

ReadAttributeValue()

在衍生類別中覆寫時,將屬性值剖析成一或多個 TextEntityReferenceEndEntity 節點。

ReadContentAs(Type, IXmlNamespaceResolver)

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

ReadContentAsAsync(Type, IXmlNamespaceResolver)

以非同步的方式讀取做為指定型别之物件的內容。

ReadContentAsBase64(Byte[], Int32, Int32)

讀取內容,並傳回 Base64 已解碼的二進位位元組。

ReadContentAsBase64Async(Byte[], Int32, Int32)

以非同步的方式讀取內容,並傳回 Base64 已解碼的二進位位元組。

ReadContentAsBinHex(Byte[], Int32, Int32)

讀取內容,並傳回 BinHex 已解碼的二進位位元組。

ReadContentAsBinHexAsync(Byte[], Int32, Int32)

以非同步的方式讀取內容,並傳回 BinHex 的解碼二進位位元組。

ReadContentAsBoolean()

Boolean 的形式,讀取目前位置的文字內容。

ReadContentAsDateTime()

DateTime 物件的形式,讀取目前位置的文字內容。

ReadContentAsDateTimeOffset()

DateTimeOffset 物件的形式,讀取目前位置的文字內容。

ReadContentAsDecimal()

Decimal 物件的形式,讀取目前位置的文字內容。

ReadContentAsDouble()

以雙精確度浮點數的形式讀取目前位置的文字內容。

ReadContentAsFloat()

以單精確度浮點數的形式讀取目前位置的文字內容。

ReadContentAsInt()

以 32 位元帶正負號之整數的形式讀取目前位置的文字內容。

ReadContentAsLong()

以 64 位元帶正負號之整數的形式讀取目前位置的文字內容。

ReadContentAsObject()

Object 的形式,讀取目前位置的文字內容。

ReadContentAsObjectAsync()

以非同步方式與 Object 的形式,讀取目前位置的文字內容。

ReadContentAsString()

String 物件的形式,讀取目前位置的文字內容。

ReadContentAsStringAsync()

以非同步方式與 String 物件的形式,讀取目前位置的文字內容。

ReadElementContentAs(Type, IXmlNamespaceResolver)

以要求之型別的形式讀取項目內容。

ReadElementContentAs(Type, IXmlNamespaceResolver, String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以要求之型別的形式讀取項目內容。

ReadElementContentAsAsync(Type, IXmlNamespaceResolver)

以要求之型別的形式,非同步讀取項目內容。

ReadElementContentAsBase64(Byte[], Int32, Int32)

讀取項目,並將 Base64 內容解碼。

ReadElementContentAsBase64Async(Byte[], Int32, Int32)

以非同步的方式讀取項目,並將 Base64 內容解碼。

ReadElementContentAsBinHex(Byte[], Int32, Int32)

讀取項目,並將 BinHex 內容解碼。

ReadElementContentAsBinHexAsync(Byte[], Int32, Int32)

以非同步的方式讀取項目,並將 BinHex 內容解碼。

ReadElementContentAsBoolean()

Boolean 物件的形式,讀取目前項目並傳回內容。

ReadElementContentAsBoolean(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以 Boolean 物件的形式,讀取目前的項目並傳回內容。

ReadElementContentAsDateTime()

DateTime 物件的形式,讀取目前項目並傳回內容。

ReadElementContentAsDateTime(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以 DateTime 物件的形式,讀取目前的項目並傳回內容。

ReadElementContentAsDecimal()

Decimal 物件的形式,讀取目前項目並傳回內容。

ReadElementContentAsDecimal(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以 Decimal 物件的形式,讀取目前的項目並傳回內容。

ReadElementContentAsDouble()

以雙精確度浮點數的形式,讀取目前的項目並傳回內容。

ReadElementContentAsDouble(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以雙精確度浮點數的形式,讀取目前的項目並傳回內容。

ReadElementContentAsFloat()

以單精確度浮點數的形式,讀取目前的項目並傳回內容。

ReadElementContentAsFloat(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以單精確度浮點數的形式,讀取目前的項目並傳回內容。

ReadElementContentAsInt()

以 32 位元帶正負號之整數的形式,讀取目前的項目並傳回內容。

ReadElementContentAsInt(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以 32 位元帶正負號之整數的形式,讀取目前的項目並傳回內容。

ReadElementContentAsLong()

以 64 位元帶正負號之整數的形式讀取目前的元素並傳回內容。

ReadElementContentAsLong(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以 64 位元帶正負號之整數的形式讀取目前的元素並傳回內容。

ReadElementContentAsObject()

Object 的形式,讀取目前項目並傳回內容。

ReadElementContentAsObject(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以 Object 的形式,讀取目前的項目並傳回內容。

ReadElementContentAsObjectAsync()

以非同步方式與 Object 的形式,讀取目前項目並傳回內容。

ReadElementContentAsString()

String 物件的形式,讀取目前項目並傳回內容。

ReadElementContentAsString(String, String)

檢查指定的區域名稱和命名空間 URI 是否與目前的項目相符,然後以 String 物件的形式,讀取目前的項目並傳回內容。

ReadElementContentAsStringAsync()

以非同步方式與 String 物件的形式,讀取目前項目並傳回內容。

ReadElementString()

讀取純文字項目。 不過,我們建議您改用ReadElementContentAsString()方法相反地,因為它會提供較簡單的方式來處理這項作業。

ReadElementString(String)

檢查Name屬性找到的項目之前讀取純文字的項目符合指定的字串。 不過,我們建議您改用ReadElementContentAsString()方法相反地,因為它會提供較簡單的方式來處理這項作業。

ReadElementString(String, String)

檢查LocalNameNamespaceURI項目的屬性找到符合的指定的字串之前讀取純文字的項目。 不過,我們建議您改用ReadElementContentAsString(String, String)方法相反地,因為它會提供較簡單的方式來處理這項作業。

ReadEndElement()

檢查目前節點為結尾標記,並使讀取器前進至下一個節點。

ReadInnerXml()

在衍生類別中覆寫時,將所有的內容當做字串讀取,包括標記。

ReadInnerXmlAsync()

以字串形式非同步讀取所有內容,包括標記。

ReadOuterXml()

在衍生類別中覆寫時,讀取代表這個節點及其所有子節點的內容,包括標記。

ReadOuterXmlAsync()

非同步讀取表示這個節點及其所有子系的內容,包括標記。

ReadStartElement()

檢查以確定目前節點為項目,然後使讀取器前進至下一個節點。

ReadStartElement(String)

檢查目前的內容節點是否具有的項目指定Name並使讀取器前進至下一個節點。

ReadStartElement(String, String)

檢查目前的內容節點是否具有的項目指定LocalNameNamespaceURI並使讀取器前進至下一個節點。

ReadString()

在衍生類別中覆寫時,將項目或文字節點的內容當做字串讀取。 不過,我們建議您改用ReadElementContentAsString方法相反地,因為它會提供較簡單的方式來處理這項作業。

ReadSubtree()

傳回新XmlReader可以用來讀取目前的節點及其所有子系的執行個體。

ReadToDescendant(String)

往前推進XmlReader下一個子系的項目,具有指定限定名稱。

ReadToDescendant(String, String)

往前推進XmlReader下一個子系的項目,使用指定的區域名稱和命名空間 URI。

ReadToFollowing(String)

在找到具有指定限定名稱的項目之前讀取。

ReadToFollowing(String, String)

在找到具有指定區域名稱和命名空間 URI 的項目之前讀取。

ReadToNextSibling(String)

往前推進XmlReader指定限定名稱的下一個同層級項目。

ReadToNextSibling(String, String)

XmlReader 前移到下一個具有指定區域名稱和命名空間 URI 的同層級項目。

ReadValueChunk(Char[], Int32, Int32)

讀取 XML 文件中內嵌之大量文字資料流。

ReadValueChunkAsync(Char[], Int32, Int32)

以非同步的方式讀取 XML 文件中內嵌之大量文字資料流。

ResolveEntity()

當在衍生類別中覆寫時,會解析實體參考EntityReference節點。

Skip()

略過目前節點的子節點。

SkipAsync()

以非同步的方式略過目前節點的子節點。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

明確介面實作

IDisposable.Dispose()

如需這個成員的說明,請參閱 Dispose()

適用於

另請參閱