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 XmlReader instancia que se puede usar 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
Nueva instancia de lector XML establecida en Initial. Al llamar al método, se Read() coloca el nuevo lector en el nodo actual antes de la llamada al ReadSubtree() método .
Excepciones
El lector XML no se coloca en un elemento cuando se llama a este método.
O bien
Se llamó a un XmlReader método antes de que finalice una operación asincrónica anterior. En este caso, InvalidOperationException se produce con el mensaje "Una operación asincrónica ya está en curso".
Ejemplos
En el ejemplo siguiente se muestra cómo usar el ReadSubtree método .
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, una vez leído el subárbol y el nuevo lector XML se ha cerrado, el lector XML original se coloca en la etiqueta final del elemento book.
No debe realizar ninguna operación en el lector original hasta que se haya cerrado el nuevo lector. Esta acción no se admite y puede dar lugar a un comportamiento imprevisible.
Note
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.