XmlReader.ReadSubtree Metodo

Definizione

Restituisce una nuova istanza di XmlReader che è possibile utilizzare per leggere il nodo corrente e tutti i relativi discendenti.

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

Restituisce

XmlReader

Nuova istanza del lettore XML impostata su Initial. La chiamata al metodo Read() posiziona il nuovo lettore sul nodo che era il nodo corrente prima della chiamata al metodo ReadSubtree().

Eccezioni

Quando viene chiamato questo metodo il lettore XML non è posizionato in corrispondenza di un elemento.

-oppure-

È stato chiamato un metodo della classe XmlReader prima del completamento di un'operazione asincrona precedente. In questo caso, viene generata l'eccezione InvalidOperationException con il messaggio "È già in corso un'operazione asincrona".

Esempio

Nell'esempio seguente viene illustrato come utilizzare il metodo 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

Usare i dati XML seguenti per eseguire gli esempi in questo argomento:

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

Commenti

ReadSubtree può essere chiamato solo nei nodi dell'elemento. Quando l'intero sotto-albero è stato letto, le chiamate al Read metodo restituisce false. Quando il nuovo lettore XML è stato chiuso, il lettore originale viene posizionato sul EndElement nodo dell'albero secondario. Pertanto, se si chiama il ReadSubtree metodo sul tag iniziale dell'elemento book, dopo che l'albero secondario è stato letto e il nuovo lettore XML è stato chiuso, il lettore XML originale viene posizionato sul tag finale dell'elemento book.

Non devono essere eseguite operazioni sul lettore originale fino a quando non è stato chiuso il nuovo lettore. Questo tipo di azione non è supportato è può causare un comportamento imprevisto.

Nota

Il ReadSubtree metodo non è destinato alla creazione di copie dei dati XML che è possibile usare in modo indipendente. È progettato per creare un limite intorno a un elemento XML. Questo è utile se si desidera passare i dati a un altro componente per l'elaborazione e si vuole limitare la quantità di dati a cui può accedere il componente. Quando si passa un lettore XML restituito dal metodo a un'altra applicazione, l'applicazione ReadSubtree può accedere solo a tale elemento XML, non all'intero documento XML.

Si applica a