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 nastavená na Initial. Read() Volání metody umístí novou čtečku na uzel, který byl aktuální před voláním ReadSubtree() metody.

Výjimky

Čtečka XML není při zavolání této metody umístěna na elementu.

-nebo-

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

Příklady

Následující příklad ukazuje, jak používat 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ů. Když byl přečtený celý dílčí strom, volání Read metody vrátí false. Po zavření nové čtečky XML je původní čtečka umístěna na EndElement uzlu dílčího stromu. Pokud jste tedy volali metodu ReadSubtree na počáteční značce elementu book, po přečtení pod strom a zavření nové čtečky XML je původní čtečka XML umístěna na koncové značce elementu knihy.

S původní čtečkou byste neměli provádět žádné operace, dokud se nová čtečka nezavře. Tato akce není podporována a může mít za následek nepředvídatelné chování.

Poznámka

Metoda ReadSubtree 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řil ohraničení. To je užitečné, pokud chcete předat data jiné komponentě ke zpracování a chcete omezit množství dat, ke které má komponenta přístup. Když předáte čtečku XML vrácenou metodou ReadSubtree do jiné aplikace, aplikace má přístup pouze k elementu XML, ne k celému dokumentu XML.

Platí pro