XPathNavigator.ReadSubtree Metoda

Definicja

XmlReader Zwraca obiekt zawierający bieżący węzeł i jego węzły podrzędne.

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

XmlReader Obiekt, który zawiera bieżący węzeł i jego węzły podrzędne.

Wyjątki

Element XPathNavigator nie jest umieszczony w węźle elementu ani w węźle głównym.

Przykłady

Poniższy przykład ilustruje użycie ReadSubtree metody w pierwszym book elemecie contosoBooks.xml pliku.

XPathDocument^ document = gcnew XPathDocument("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

navigator->MoveToChild("bookstore", "http://www.contoso.com/books");
navigator->MoveToChild("book", "http://www.contoso.com/books");

XmlReader^ reader = navigator->ReadSubtree();

while (reader->Read())
{
    Console::WriteLine(reader->ReadInnerXml());
}

reader->Close();
XPathDocument document = new XPathDocument("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");

XmlReader reader = navigator.ReadSubtree();

while (reader.Read())
{
    Console.WriteLine(reader.ReadInnerXml());
}

reader.Close();
Dim document As XPathDocument = New XPathDocument("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")

Dim reader As XmlReader = navigator.ReadSubtree()

While reader.Read()
    Console.WriteLine(reader.ReadInnerXml())
End While

reader.Close()

W przykładzie plik jest contosoBooks.xml pobierany jako dane wejściowe.

<?xml version="1.0" encoding="utf-8" ?>  
<bookstore xmlns="http://www.contoso.com/books">  
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">  
        <title>The Autobiography of Benjamin Franklin</title>  
        <author>  
            <first-name>Benjamin</first-name>  
            <last-name>Franklin</last-name>  
        </author>  
        <price>8.99</price>  
    </book>  
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">  
        <title>The Confidence Man</title>  
        <author>  
            <first-name>Herman</first-name>  
            <last-name>Melville</last-name>  
        </author>  
        <price>11.99</price>  
    </book>  
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">  
        <title>The Gorgias</title>  
        <author>  
            <name>Plato</name>  
        </author>  
        <price>9.99</price>  
    </book>  
</bookstore>  

Uwagi

Po utworzeniu XmlReader obiektu przy użyciu bieżącego węzła i jego węzłów XmlReader podrzędnych właściwość obiektu jest ustawiona ReadState na Initialwartość . XmlReader Gdy metoda obiektu jest wywoływana Read po raz pierwszy, XmlReader obiekt jest przenoszony do bieżącego węzła obiektu XPathNavigator. Nowy XmlReader obiekt będzie nadal odczytywany do momentu osiągnięcia końca drzewa XML. W tym momencie Read metoda zwraca false wartość , a XmlReader właściwość obiektu jest ustawiona ReadState na EndOfFilewartość .

Uwaga

Zmiana położenia XmlReader obiektu nie ma wpływu na położenie XPathNavigatorobiektu .

Deklaracje przestrzeni nazw dla przestrzeni nazw w zakresie bieżącego węzła nie są wstawiane do strumienia XML dostarczonego XmlReader do obiektu.

Uwaga

To zachowanie różni się od WriteSubtree metody .

Ta metoda tworzy XmlReader obiekt z określonymi ustawieniami czytnika, a moduł, który używa tej metody, nie ma kontroli nad tymi ustawieniami. Na przykład czytnik zwrócony przez tę metodę uniemożliwia przetwarzanie definicji typów danych (DTD). Jeśli czytelnik spróbuje odczytać plik używający dtD, zgłosi błąd . XmlException Komunikat dla wyjątku będzie następujący Unexpected DTD declaration: .

To zachowanie można zmienić, implementując niestandardowy obiekt XmlResolver , który zwraca XmlReader obiekt z żądanym elementem XmlReaderSettings.

Dotyczy