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 может вызываться только на узлах элементов. При чтении всего вложенного дерева вызовы Read метода возвращаются false. При закрытии нового средства чтения XML исходный модуль чтения размещается на EndElement узле вложенного дерева. Таким образом, если метод вызывается ReadSubtree в начальном теге элемента книги, после чтения вложенного дерева и закрытия нового средства чтения XML исходный модуль чтения XML размещается в конце тега элемента книги.

Пока не будет закрыт новый модуль чтения, не следует выполнять никаких операций с первоначальным модулем. Такие действия не поддерживаются и могут привести к непредсказуемым эффектам.

Примечание

Этот ReadSubtree метод не предназначен для создания копий XML-данных, с которыми можно работать независимо. Она предназначена для создания границы вокруг XML-элемента. Это полезно, если вы хотите передать данные другому компоненту для обработки, и вы хотите ограничить объем данных, к которым может получить доступ компонент. При передаче средства чтения XML, возвращаемого методом ReadSubtree другому приложению, приложение может получить доступ только к тому XML-элементу, а не ко всему XML-документу.

Применяется к