XmlReader.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 una nueva instancia de XmlReader
que se puede utilizar para leer el nodo actual y todos sus descendientes.
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
Una nueva instancia del lector XML establecida en Initial. Al llamar al método Read(), se coloca el nuevo lector en el nodo que era el actual antes de la llamada al método ReadSubtree().
Excepciones
El lector XML no se colocó sobre un elemento al llamar a este método.
o bien
Se llamó un método XmlReader antes de que se termine una operación asincrónica anterior. En este caso, se genera InvalidOperationException con el mensaje “Ya hay una operación asincrónica en curso”.
Ejemplos
En el siguiente ejemplo, se muestra cómo utilizar el método 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
Use los siguientes datos XML para ejecutar los ejemplos de este tema:
<?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>
Comentarios
ReadSubtree solo se puede llamar a en nodos de elemento. Cuando se ha leído todo el subárbol, las llamadas al Read método devuelven false
. Cuando se ha cerrado el nuevo lector XML, el lector original se coloca en el EndElement
nodo del subárbol. Por lo tanto, si llamó al ReadSubtree método en la etiqueta inicial del elemento book, después de leer el subárbol y se ha cerrado el nuevo lector XML, el lector XML original se coloca en la etiqueta final del elemento book.
No debería realizar ninguna operación en el sistema de lectura original hasta que se haya cerrado el sistema de lectura nuevo. Esta acción no está admitida, por lo que se puede producir un comportamiento impredecible.
Nota:
El ReadSubtree método no está pensado para crear copias de los datos XML con los que puede trabajar de forma independiente. Está diseñado para crear un límite alrededor de un elemento XML. Esto resulta útil si desea pasar datos a otro componente para su procesamiento y desea limitar la cantidad de datos a los que puede acceder el componente. Cuando se pasa un lector XML devuelto por el ReadSubtree método a otra aplicación, la aplicación solo puede tener acceso a ese elemento XML, no a todo el documento XML.