XmlReader.ReadSubtree 方法

定義

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

public:
 virtual System::Xml::XmlReader ^ ReadSubtree();
public virtual System.Xml.XmlReader ReadSubtree ();
abstract member ReadSubtree : unit -> System.Xml.XmlReader
override this.ReadSubtree : unit -> System.Xml.XmlReader
Public Overridable Function ReadSubtree () As XmlReader

傳回

XmlReader

新的 XML 讀取器執行個體設定為Initial。 呼叫Read()方法前呼叫的節點上放置新讀取器ReadSubtree()方法。

例外狀況

呼叫這個方法時,XML 讀取器未位於項目上。

-或-

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

範例

下列範例會示範如何使用 ReadSubtree 方法。

XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
using (XmlReader reader = XmlReader.Create("books.xml", settings)) {

  // Position the reader on the second book node
  reader.ReadToFollowing("Book");
  reader.Skip();

  // Create another reader that contains just the second book node.
  XmlReader inner = reader.ReadSubtree();

  inner.ReadToDescendant("Title");
  Console.WriteLine(inner.Name);

  // Do additional processing on the inner reader. After you
  // are done, call Close on the inner reader and
  // continue processing using the original reader.
  inner.Close();
}
Dim settings As New XmlReaderSettings()
settings.IgnoreWhitespace = True
Using reader As XmlReader = XmlReader.Create("books.xml", settings)

  ' Position the reader on the second book node.
  reader.ReadToFollowing("Book")
  reader.Skip()
                
  ' Create another reader that contains just the second book node.
  Dim inner As XmlReader = reader.ReadSubtree()
            
  inner.ReadToDescendant("Title")
  Console.WriteLine(inner.Name)

  ' Do additional processing on the inner reader. After you 
  ' are done, call Close on the inner reader and 
  ' continue processing using the original reader.
  inner.Close()

End Using

使用下列 XML 資料來執行本主題中的範例:

<?xml version="1.0" encoding="utf-8" ?>
<Books>
  <Book>
    <Title>A Brief History of Time</Title>
  </Book>
  <Book>
    <Title>Principle Of Relativity</Title>
  </Book>
  <Book>
    <Title>Victory of Reason</Title>
  </Book>
  <Book>
    <Title>The Unicorn that did not Fail</Title>
  </Book>
  <Book>
    <Title>Rational Ontology</Title>
  </Book>
  <Book>
    <Title>The Meaning of Pizza</Title>
  </Book>
</Books>

備註

ReadSubtree 只能在專案節點上呼叫。 讀取整個子樹狀結構時,呼叫 方法會 Readfalse 回 。 當新的 XML 讀取器關閉時,原始讀取器會放置在 EndElement 子樹狀結構的節點上。 因此,如果您在 book 元素的 start 標記上呼叫 ReadSubtree 方法,在讀取子樹狀結構並關閉新的 XML 讀取器之後,原始 XML 讀取器會放置在 book 元素的結束記號上。

在關閉新讀取器之前,不應在原始讀取器上執行任何作業。 此動作不受支援,並會導致無法預期的行為。

注意

方法 ReadSubtree 不適合用來建立您可以獨立使用的 XML 資料複本。 其設計目的是要建立 XML 元素周圍的界限。 如果您想要將資料傳遞至另一個元件進行處理,而且您想要限制元件可以存取的資料量,這會很有用。 當您將 方法傳 ReadSubtree 回的 XML 讀取器傳遞給另一個應用程式時,應用程式只能存取該 XML 元素,而不是整個 XML 檔。

適用於