XmlReader.ReadSubtree Metoda

Definice

Vrátí novou XmlReader instanci, kterou lze použít ke čtení aktuálního uzlu a všech jeho potomků.

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

Návraty

Nová instance čtečky XML nastavena na Initial. Read() Volání metody umístí novou čtenáře na uzel, který byl aktuální před voláním ReadSubtree() metody.

Výjimky

Čtečka XML není umístěna na element, když je volána tato metoda.

nebo

Před XmlReader dokončením předchozí asynchronní operace byla volána metoda. V tomto případě InvalidOperationException je vyvolán zpráva "Asynchronní operace už probíhá".

Příklady

Následující příklad ukazuje, jak použít metodu 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

Ke spuštění příkladů v tomto tématu použijte následující data XML:

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

Poznámky

ReadSubtree lze volat pouze na uzlech elementů. Při čtení celého dílčího stromu volání Read metody vrátí false. Po zavření nové čtečky XML se původní čtečka umístí na EndElement uzel podsložky. Pokud jste tedy volali metodu ReadSubtree na počáteční značce elementu knihy, po přečtení podsložky a byla uzavřena nová čtečka XML, původní čtečka XML je umístěna na konci značky prvku knihy.

U původního čtenáře byste neměli provádět žádné operace, dokud nebude nový čtenář zavřený. Tato akce není podporována a může vést k nepředvídatelným chováním.

Note

Tato ReadSubtree metoda není určená k vytváření kopií dat XML, se kterými můžete pracovat nezávisle. Je navržená tak, aby kolem elementu XML vytvořila hranici. To je užitečné, pokud chcete předat data jiné komponentě ke zpracování a chcete omezit, kolik dat má komponenta přístup. Když předáte čtečku ReadSubtree XML vrácenou metodou do jiné aplikace, aplikace má přístup pouze k danému elementu XML, nikoli k celému dokumentu XML.

Platí pro