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

Объект 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объект.

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