XPathNavigator.ReadSubtree Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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.