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

返回

设置为 Initial 的新 XML 实例。 调用 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 只能在元素节点上调用。 读取整个子树后,对 方法的 Read 调用将 false返回 。 当新的 XML 读取器已关闭时,原始读取器将 EndElement 位于子树的节点上。 因此,如果在 book 元素的起始标记上调用 ReadSubtree 方法,在读取子树并关闭新的 XML 读取器后,原始 XML 读取器将位于 book 元素的结束标记上。

在关闭新的读取器之前,不应对原始读取器执行任何操作。 不支持此操作,因为这样可能会导致意想不到的行为。

备注

方法 ReadSubtree 不用于创建可以独立使用的 XML 数据的副本。 它旨在围绕 XML 元素创建边界。 如果要将数据传递给另一个组件进行处理,并且希望限制该组件可以访问的数据量,这非常有用。 将 方法返回 ReadSubtree 的 XML 读取器传递给另一个应用程序时,应用程序只能访问该 XML 元素,而不能访问整个 XML 文档。

适用于