XmlReader.ReadSubtree Méthode

Définition

Retourne une nouvelle XmlReader instance qui peut être utilisée pour lire le nœud actuel et tous ses 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

Retours

Nouvelle instance de lecteur XML définie sur Initial. L’appel de la Read() méthode positionne le nouveau lecteur sur le nœud qui était actif avant l’appel à la ReadSubtree() méthode.

Exceptions

Le lecteur XML n’est pas positionné sur un élément lorsque cette méthode est appelée.

-ou-

Une XmlReader méthode a été appelée avant la fin d’une opération asynchrone précédente. Dans ce cas, InvalidOperationException est levée avec le message « Une opération asynchrone est déjà en cours ».

Exemples

L’exemple suivant montre comment utiliser la ReadSubtree méthode.

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

Utilisez les données XML suivantes pour exécuter les exemples de cette rubrique :

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

Remarques

ReadSubtree peut être appelé uniquement sur les nœuds d’élément. Lorsque la sous-arborescence entière a été lue, les appels à la Read méthode retournent false. Lorsque le nouveau lecteur XML a été fermé, le lecteur d’origine est positionné sur le EndElement nœud de la sous-arborescence. Par conséquent, si vous avez appelé la ReadSubtree méthode sur la balise de début de l’élément de livre, une fois que la sous-arborescence a été lue et que le nouveau lecteur XML a été fermé, le lecteur XML d’origine est positionné sur la balise de fin de l’élément de livre.

Vous ne devez effectuer aucune opération sur le lecteur d’origine tant que le nouveau lecteur n’a pas été fermé. Cette action n’est pas prise en charge et peut entraîner un comportement imprévisible.

Note

La ReadSubtree méthode n’est pas destinée à créer des copies des données XML que vous pouvez utiliser indépendamment. Il est conçu pour créer une limite autour d’un élément XML. Cela est utile si vous souhaitez transmettre des données à un autre composant pour le traitement et que vous souhaitez limiter la quantité de vos données que le composant peut accéder. Lorsque vous transmettez un lecteur XML retourné par la ReadSubtree méthode à une autre application, l’application peut accéder uniquement à cet élément XML, et non à l’intégralité du document XML.

S’applique à