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
Новый экземпляр средства чтения 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-документу.