XPathNavigator.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, содержащий текущий узел и его дочерние узлы.
Исключения
Объект XPathNavigator не находится в узле элемента или в корневом узле.
Примеры
В следующем примере показано использование ReadSubtree метода в первом book
элементе contosoBooks.xml
файла.
XPathDocument^ document = gcnew XPathDocument("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();
navigator->MoveToChild("bookstore", "http://www.contoso.com/books");
navigator->MoveToChild("book", "http://www.contoso.com/books");
XmlReader^ reader = navigator->ReadSubtree();
while (reader->Read())
{
Console::WriteLine(reader->ReadInnerXml());
}
reader->Close();
XPathDocument document = new XPathDocument("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
XmlReader reader = navigator.ReadSubtree();
while (reader.Read())
{
Console.WriteLine(reader.ReadInnerXml());
}
reader.Close();
Dim document As XPathDocument = New XPathDocument("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
Dim reader As XmlReader = navigator.ReadSubtree()
While reader.Read()
Console.WriteLine(reader.ReadInnerXml())
End While
reader.Close()
В примере в качестве входных данных используется файл contosoBooks.xml
.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Комментарии
Когда объект XmlReader создан с текущим узлом и дочерними узлами, свойство XmlReader объекта ReadState имеет значение Initial. Когда метод XmlReader объекта Read вызывается в первый раз, XmlReader перемещается в текущий узел XPathNavigator. Новый объект XmlReader продолжает считывание до тех пор, пока не будет достигнут конец XML-дерева. На этом этапе метод Read возвращает false
, а свойство XmlReader объекта ReadState имеет значение EndOfFile.
Примечание
Изменение положения XmlReader объекта не влияет на положение XPathNavigatorобъекта.
Объявления пространств имен для пространств имен текущего узла не вставляются в XML-поток, предоставленный объекту XmlReader .
Примечание
Это поведение отличается от WriteSubtree метода.
Этот метод создает XmlReader объект с определенными параметрами чтения, а модуль, использующий этот метод, не контролирует эти параметры. Например, средство чтения, возвращаемое этим методом, запрещает обработку определений типов данных (DTD). Если средство чтения пытается прочитать файл, использующий DTD, он вызовет ошибку XmlException. Сообщение об исключении будет иметь значение Unexpected DTD declaration
.
Это поведение можно изменить, реализовав пользовательский объект XmlResolver , возвращающий XmlReader нужный XmlReaderSettingsобъект.