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

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

Note

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

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