Compartir a través de


XmlReader.ReadSubtree Método

Definición

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.

Se aplica a