XmlReader.ReadSubtree Método

Definición

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.

Se aplica a