XPathNavigator.ReadSubtree Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna um XmlReader objeto que contém o nó atual e seus nós filho.
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
Retornos
Um XmlReader objeto que contém o nó atual e seus nós filho.
Exceções
Não XPathNavigator está posicionado em um nó de elemento ou no nó raiz.
Exemplos
O exemplo a seguir ilustra o uso do ReadSubtree método no primeiro book elemento do contosoBooks.xml arquivo.
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()
O exemplo usa o contosoBooks.xml arquivo como uma entrada.
<?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>
Comentários
Quando o objeto XmlReader é criado com o nó atual e seus nós filho, a propriedade XmlReader do objeto ReadState é definida como Initial. Quando o método XmlReader do objeto Read é chamado pela primeira vez, o XmlReader é movido para o nó atual XPathNavigator. O novo XmlReader objeto continua a ser lido até que o final da árvore XML seja atingido. Neste ponto, o Read método retorna false e a XmlReader propriedade do ReadState objeto é definida como EndOfFile.
Observação
Alterar a posição do XmlReader objeto não afeta a posição do XPathNavigator.
As declarações de namespace para os namespaces no escopo do nó atual não são inseridas no fluxo XML fornecido ao XmlReader objeto.
Observação
Esse comportamento difere do WriteSubtree método.
Esse método cria o XmlReader objeto com configurações de leitor específicas e o módulo que usa esse método não tem controle sobre essas configurações. Por exemplo, o leitor retornado por esse método proíbe o processamento de DTDs (Definições de Tipo de Dados). Se o leitor tentar ler um arquivo que usa um DTD, ele gerará um erro XmlException. A mensagem para a exceção será Unexpected DTD declaration.
Você pode alterar esse comportamento implementando um personalizado XmlResolver que retorna um XmlReader com o desejado XmlReaderSettings.