XmlReader.ReadSubtree Metod

Definition

Returnerar en ny XmlReader instans som kan användas för att läsa den aktuella noden och alla dess underordnade.

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

Returer

En ny XML-läsarinstans inställd på Initial. Read() När metoden anropas placerar den nya läsaren på den nod som var aktuell före anropet ReadSubtree() till metoden.

Undantag

XML-läsaren är inte placerad på ett element när den här metoden anropas.

-eller-

En XmlReader metod anropades innan en tidigare asynkron åtgärd slutfördes. I det här fallet InvalidOperationException genereras meddelandet "En asynkron åtgärd pågår redan".

Exempel

I följande exempel visas hur du ReadSubtree använder metoden.

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

Använd följande XML-data för att köra exemplen i det här avsnittet:

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

Kommentarer

ReadSubtree kan bara anropas på elementnoder. När hela underträdet har lästs returnerar Readanrop till false metoden . När den nya XML-läsaren har stängts placeras den ursprungliga läsaren på EndElement noden i underträdet. Om du anropade ReadSubtree metoden på starttaggen för bokelementet, efter att underträdet har lästs och den nya XML-läsaren har stängts, placeras den ursprungliga XML-läsaren på sluttaggen för bokelementet.

Du bör inte utföra några åtgärder på den ursprungliga läsaren förrän den nya läsaren har stängts. Den här åtgärden stöds inte och kan leda till oförutsägbart beteende.

Note

Metoden ReadSubtree är inte avsedd för att skapa kopior av XML-data som du kan arbeta med oberoende av varandra. Den är utformad för att skapa en gräns runt ett XML-element. Detta är användbart om du vill skicka data till en annan komponent för bearbetning och du vill begränsa hur mycket av dina data som komponenten kan komma åt. När du skickar en XML-läsare som returneras av ReadSubtree metoden till ett annat program kan programmet bara komma åt xml-elementet, inte hela XML-dokumentet.

Gäller för