Udostępnij za pośrednictwem


XmlReader.ReadSubtree Metoda

Definicja

Zwraca nowe XmlReader wystąpienie, które może służyć do odczytywania bieżącego węzła i wszystkich jego elementów podrzędnych.

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

Zwraca

XmlReader

Nowe wystąpienie czytnika XML ma ustawioną wartość Initial. Read() Wywołanie metody powoduje położenie nowego czytnika w węźle, który był bieżący przed wywołaniem ReadSubtree() metody .

Wyjątki

Czytnik XML nie jest umieszczony w elemecie po wywołaniu tej metody.

-lub-

Metoda XmlReader została wywołana przed zakończeniem poprzedniej operacji asynchronicznej. W takim przypadku InvalidOperationException jest zgłaszany komunikat "Operacja asynchroniczna jest już w toku".

Przykłady

W poniższym przykładzie pokazano, jak używać ReadSubtree metody .

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

Użyj następujących danych XML, aby uruchomić przykłady w tym temacie:

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

Uwagi

ReadSubtree można wywoływać tylko w węzłach elementów. Gdy całe drzewo podrzędne zostało odczytane, wywołania Read metody zwracają wartość false. Po zamknięciu nowego czytnika XML oryginalny czytnik jest umieszczony w EndElement węźle drzewa podrzędnego. W związku z tym, jeśli wywołano metodę ReadSubtree na tagu początkowym elementu książki, po odczytaniu podzadrzewa i zamknięciu nowego czytnika XML oryginalny czytnik XML jest umieszczony na końcu tagu elementu książki.

Nie należy wykonywać żadnych operacji na oryginalnym czytniku, dopóki nowy czytnik nie zostanie zamknięty. Ta akcja nie jest obsługiwana i może spowodować nieprzewidywalne zachowanie.

Uwaga

Metoda ReadSubtree nie jest przeznaczona do tworzenia kopii danych XML, z którymi można pracować niezależnie. Jest on przeznaczony do tworzenia granicy wokół elementu XML. Jest to przydatne, jeśli chcesz przekazać dane do innego składnika do przetwarzania i chcesz ograniczyć ilość danych, do których składnik może uzyskać dostęp. Po przekazaniu czytnika XML zwróconego przez metodę ReadSubtree do innej aplikacji aplikacja może uzyskać dostęp tylko do tego elementu XML, a nie całego dokumentu XML.

Dotyczy