XmlReader.ReadSubtree XmlReader.ReadSubtree XmlReader.ReadSubtree XmlReader.ReadSubtree Method

Definición

Devuelve una nueva instancia de XmlReader que se puede utilizar para leer el nodo actual y todos sus descendientes.Returns a new XmlReader instance that can be used to read the current node, and all its descendants.

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.A new XML reader instance set to 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().Calling the Read() method positions the new reader on the node that was current before the call to the ReadSubtree() method.

Excepciones

El lector XML no se colocó sobre un elemento al llamar a este método.The XML reader isn't positioned on an element when this method is called.

O bien-or-

Se llamó un método XmlReader antes de que se termine una operación asincrónica anterior.An XmlReader method was called before a previous asynchronous operation finished. En este caso, se genera InvalidOperationException con el mensaje “Ya hay una operación asincrónica en curso”.In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

Ejemplos

En el siguiente ejemplo, se muestra cómo utilizar el método ReadSubtree.The following example shows how to use the ReadSubtree method.

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:Use the following XML data to run the examples in this topic:

<?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

ReadSubtreesolo se puede llamar en nodos de elemento.ReadSubtree can be called only on element nodes. Cuando se ha leído todo el subárbol, las llamadas al Read método devuelven. falseWhen the entire sub-tree has been read, calls to the Read method returns false. Cuando se ha cerrado el nuevo lector XML, el sistema de lectura original se coloca EndElement en el nodo del subárbol.When the new XML reader has been closed, the original reader is positioned on the EndElement node of the sub-tree. Por lo tanto, si llamó ReadSubtree al método en la etiqueta de apertura del elemento book, una vez que se ha leído el subárbol y se ha cerrado el nuevo lector XML, el lector XML original se coloca en la etiqueta de cierre del elemento book.Thus, if you called the ReadSubtree method on the start tag of the book element, after the sub-tree has been read and the new XML reader has been closed, the original XML reader is positioned on the end tag of the book element.

No debería realizar ninguna operación en el sistema de lectura original hasta que se haya cerrado el sistema de lectura nuevo.You should not perform any operations on the original reader until the new reader has been closed. Esta acción no está admitida, por lo que se puede producir un comportamiento impredecible.This action is not supported and can result in unpredictable behavior.

Nota

El ReadSubtree método no está pensado para crear copias de los datos XML con los que puede trabajar de forma independiente.The ReadSubtree method isn't intended for creating copies of the XML data that you can work with independently. Está diseñado para crear un límite alrededor de un elemento XML.It's designed to create a boundary around an XML element. Esto resulta útil si desea pasar datos a otro componente para su procesamiento y desea limitar la cantidad de datos a los que puede tener acceso el componente.This is useful if you want to pass data to another component for processing and you wish to limit how much of your data the component can access. Cuando se pasa un lector XML devuelto por ReadSubtree el método a otra aplicación, la aplicación solo puede tener acceso a ese elemento XML, no a todo el documento XML.When you pass an XML reader returned by the ReadSubtree method to another application, the application can access only that XML element, not the entire XML document.

Se aplica a