Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como usar a XmlTextReader classe para ler os dados XML de um arquivo.
Versão original do produto: Visual C++
Número de KB original: 815658
Resumo
Este artigo descreve como usar a XmlTextReader classe para ler os dados XML de um arquivo. A XmlTextReader classe fornece análise direta e tokenização dos dados XML. A XmlTextReader classe também implementa a especificação XML 1.0, além dos namespaces, na especificação XML definida pelo W3C (World Wide Web Consortium). Este artigo descreve como fazer acesso rápido e tokenizado de fluxo aos dados XML em vez de usar um modelo de objeto, como o DOM (Modelo de Objeto de Documento XML).
Para obter uma versão do .NET do Microsoft Visual C# deste artigo, consulte Como ler XML de um arquivo usando o Visual C#.
Este artigo refere-se ao seguinte namespace da Biblioteca de Classes do Microsoft .NET Framework: System.xml
Requisitos
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
- Terminologia XML
- Como criar e como ler um arquivo XML
A lista a seguir descreve o hardware, o software, a infraestrutura de rede e os service packs recomendados de que você precisa:
- Microsoft Visual Studio .NET
- Microsoft Visual Studio 2005
Ler os dados XML de um arquivo
O exemplo neste artigo usa um arquivo chamado Books.xml. Você pode criar seu próprio arquivo de Books.xml ou pode usar o arquivo de exemplo incluído nos Guias de Início Rápido do Microsoft .NET Software Development Kit (SDK). Você deve copiar o arquivo Books.xml para a pasta do projeto.
Para ler os dados XML de um arquivo, siga estas etapas:
Inicie o Visual Studio .NET 2002, Visual Studio .NET 2003 ou Visual Studio 2005.
No menu Arquivo , aponte para Novo e clique em Projeto.
A caixa de diálogo Novo Projeto aparece.
Em Tipos de Projeto, clique em Projetos do Visual C++.
Observação
No Visual Studio 2005, os Projetos do Visual C++ são alterados para Visual C++.
Em Modelos, clique em Aplicativo C++ Gerenciado se você estiver usando o Visual Studio .NET 2002.
Em Modelos, clique em Aplicativo de Console (.NET) se você estiver usando o Visual Studio .NET 2003.
Em Modelos, clique em Aplicativo de Console CLR se você estiver usando o Visual Studio 2005.
Na caixa Nome , digite Q815658 e clique em OK.
Adicione uma referência ao
System.xml.dllno projeto. Para obter mais informações sobre como adicionar referências a um projeto gerenciado do Visual C++, consulte Adicionar referências a um projeto gerenciado do Visual C++Especifique a diretiva using no namespace
System::Xmlda seguinte maneira:using namespace System::Xml;Você faz isso para não precisar qualificar as
XmlTextReaderdeclarações de classe posteriormente em seu código. Você deve usar a diretiva using antes de qualquer outra declaração.Crie uma instância do
XmlTextReaderobjeto. Preencha oXmlTextReaderobjeto com o arquivo .xml.Normalmente, a
XmlTextReaderclasse será usada se você precisar acessar os dados XML brutos sem a sobrecarga do DOM. Portanto, aXmlTextReaderclasse fornece uma maneira mais rápida de ler os dados XML. AXmlTextReaderclasse possui elementos diferentesconstructorsque especificam o local dos dados XML.O código a seguir cria uma instância da
XmlTextReaderclasse e carrega o arquivo Books.xml . Adicione o seguinte código à_tmainfunção:XmlTextReader* reader = new XmlTextReader ("books.xml");Observação
No Visual C++ 2005, a
_tmainfunção é alterada para a função principal.Leia os dados XML.
Observação
Esta etapa demonstra um loop externo while. As duas etapas que seguem esta etapa demonstram como usar o loop while para ler os dados XML.
Depois de criar o
XmlTextReaderobjeto, use o método Read para ler os dados XML.O método Read continua a se mover sequencialmente pelo arquivo .xml até que o método Read chegue ao final do arquivo. Quando o método Read atinge o final do arquivo, o método Read retorna false.
while (reader->Read()) { // Do some work here on the data. Console::WriteLine(reader->Name); }Examine os nós.
Para processar os dados XML, cada registro tem um tipo de nó que pode ser determinado a partir da propriedade
NodeType. ANamepropriedade e aValuepropriedade retornam as seguintes informações para o nó atual ou para o registro atual:- O nome do nó, que é composto pelo nome do elemento e o nome do atributo.
- O valor do nó referente ao texto do nó.
A
NodeTypeenumeração determina o tipo de nó. O exemplo de código a seguir exibe o nome dos elementos e o tipo de documento. O exemplo de código a seguir ignora atributos de elemento:while (reader->Read()) { switch (reader->NodeType) { case XmlNodeType::Element: // The node is an element. Console::Write("<{0}", reader->Name); Console::WriteLine(">"); break; case XmlNodeType::Text: //Display the text in each element. Console::WriteLine (reader->Value); break; case XmlNodeType::EndElement: //Display the end of the element. Console::Write("</{0}", reader->Name); Console::WriteLine(">"); break; } }Examine os atributos.
Os tipos de nó de elemento podem incluir uma lista de nós de atributos associados a eles. O
MovetoNextAttributemétodo se move sequencialmente por cada atributo no elemento. Use a propriedadeHasAttributespara testar se o nó tem algum atributo. A propriedadeAttributeCountretorna o número de atributos para o nó atual.while (reader->Read()) { switch (reader->NodeType) { case XmlNodeType::Element: // The node is an element. Console::Write("<{0}", reader->Name); while (reader->MoveToNextAttribute()) // Read the attributes. Console::Write(" {0}='{1}'", reader->Name, reader->Value); Console::WriteLine(">"); break; case XmlNodeType::Text: //Display the text in each element. Console::WriteLine (reader->Value); break; case XmlNodeType::EndElement: //Display the end of the element. Console::Write("</{0}", reader->Name); Console::WriteLine(">"); break; } }Salve a solução. Compile a solução.
Pressione CTRL+F5 para executar o aplicativo de exemplo.
Exibir a listagem de código completa no Visual Studio .NET 2002 ou no Visual Studio .NET 2003
#include "stdafx.h"
#include <tchar.h>
#using <mscorlib.dll>
#using <System.xml.dll>
using namespace System;
using namespace System::Xml;
void _tmain(void)
{
XmlTextReader* reader = new XmlTextReader ("books.xml");
while (reader->Read())
{
switch (reader->NodeType)
{
case XmlNodeType::Element: // The node is an element.
Console::Write("<{0}", reader->Name);
while (reader->MoveToNextAttribute()) // Read the attributes.
Console::Write(" {0}='{1}'", reader->Name, reader->Value);
Console::WriteLine(">");
break;
case XmlNodeType::Text: //Display the text in each element.
Console::WriteLine (reader->Value);
break;
case XmlNodeType::EndElement: //Display the end of the element.
Console::Write("</{0}", reader->Name);
Console::WriteLine(">");
break;
}
}
Console::ReadLine();
}
Observação
Você deve adicionar a opção do compilador de suporte do Common Language Runtime (/clr:oldSyntax) no Visual C++ 2005 para compilar com êxito o exemplo de código anterior. Para adicionar a opção do compilador de suporte do Common Language Runtime no Visual C++ 2005, siga estas etapas:
Clique em Projeto e, em seguida, clique <em Propriedades do ProjectName> .
Observação
<ProjectName> é um espaço reservado para o nome do projeto.
Expanda propriedades de configuração e clique em Geral.
Clique para selecionar Suporte do Common Language Runtime, Sintaxe Antiga (/clr:oldSyntax) na configuração de projeto de suporte do Common Language Runtime no painel direito, clique em Aplicar e clique em OK.
Para obter mais informações sobre a opção do compilador de suporte do Common Language Runtime, consulte /clr (Common Language Runtime Compilation).
Essas etapas se aplicam a todo o artigo.
Exibir a saída de exemplo
<bookstore>
<book genre='autobiography' publicationdate='1981' 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' 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' ISBN='1-861001-57-6'>
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>
Solução de problemas
Ao executar o aplicativo de exemplo, você pode receber a seguinte mensagem de erro:
Uma exceção sem tratamento do tipo System.Xml.XmlException ocorreu em System.xml.dll Informações adicionais: erro do sistema.
References
Para obter mais informações sobre como ler XML com o XmlReader, consulte Ler XML com o XmlReader.