XmlReader.ReadSubtree Método

Definição

Devolve uma nova XmlReader instância que pode ser usada para ler o nó atual e todos os seus descendentes.

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

Devoluções

Uma nova instância de leitor XML definida como Initial. Chamar o Read() método posiciona o novo leitor no nó que estava em corrente antes da chamada ao ReadSubtree() método.

Exceções

O leitor XML não está posicionado num elemento quando este método é chamado.

-ou-

Um XmlReader método era chamado antes de uma operação assíncrona anterior terminar. Neste caso, InvalidOperationException é lançado com a mensagem "Uma operação assíncrona já está em curso."

Exemplos

O exemplo seguinte mostra como usar o ReadSubtree método.

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

Use os seguintes dados XML para executar os exemplos deste tópico:

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

Observações

ReadSubtree só pode ser chamado em nós elemento. Quando toda a subárvore foi lida, as chamadas ao Read método retornam false. Quando o novo leitor XML é fechado, o leitor original é posicionado no EndElement nó da subárvore. Assim, se chamar o ReadSubtree método na etiqueta inicial do elemento livro, depois de a subárvore ter sido lida e o novo leitor XML ter sido fechado, o leitor XML original é posicionado na etiqueta final do elemento livro.

Não deve realizar qualquer operação no leitor original até que o novo leitor esteja fechado. Esta ação não é suportada e pode resultar em comportamentos imprevisíveis.

Note

O ReadSubtree método não se destina a criar cópias dos dados XML com as quais possas trabalhar de forma independente. Foi concebido para criar um limite em torno de um elemento XML. Isto é útil se quiser passar dados para outro componente para processamento e pretende limitar a quantidade de dados a que o componente pode aceder. Quando passa um leitor XML devolvido ReadSubtree pelo método a outra aplicação, esta só pode aceder a esse elemento XML, não a todo o documento XML.

Aplica-se a