Compartir a través de


XPathNavigator.ReadSubtree Método

Definición

Devuelve un objeto XmlReader que contiene el nodo actual y sus nodos secundarios.

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

Devoluciones

XmlReader

Objeto XmlReader que contiene el nodo actual y sus nodos secundarios.

Excepciones

El XPathNavigator no se coloca en ningún nodo de elemento ni en el nodo raíz.

Ejemplos

En el ejemplo siguiente se muestra el uso del ReadSubtree método en el primer book elemento del contosoBooks.xml archivo.

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()

En el ejemplo se toma como entrada el archivo 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>  

Comentarios

Cuando se crea el objeto XmlReader con el nodo actual y sus nodos secundarios, la propiedad XmlReader del objeto ReadState se establece en Initial. Cuando por primera vez se llama al método XmlReader del objeto Read, XmlReader se desplaza al nodo actual de XPathNavigator. El nuevo objeto XmlReader continúa leyendo hasta llegar al final del árbol de XML. En este punto, el método Read devuelve false y la propiedad XmlReader del objeto ReadState se establece en EndOfFile.

Nota

Cambiar la posición del XmlReader objeto no afecta a la posición de XPathNavigator.

Las declaraciones de espacio de nombres para los espacios de nombres en el ámbito del nodo actual no se insertan en la secuencia XML proporcionada al XmlReader objeto .

Nota

Este comportamiento difiere del WriteSubtree método .

Este método crea el XmlReader objeto con una configuración de lector específica y el módulo que usa este método no tiene control sobre esa configuración. Por ejemplo, el lector devuelto por este método prohíbe el procesamiento de definiciones de tipo de datos (DTD). Si el lector intenta leer un archivo que usa una DTD, se producirá un error, XmlException. El mensaje de la excepción será Unexpected DTD declaration.

Para cambiar este comportamiento, implemente un personalizado XmlResolver que devuelva un XmlReader objeto con el deseado XmlReaderSettings.

Se aplica a