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 original do KB: 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 indexado aos dados XML em vez de usar um modelo de objeto, como o DOM (Document Object Model) XML.
Para obter uma versão do Microsoft Visual C# .NET 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 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 Books.xml ou usar o arquivo de exemplo incluído nos Inícios Rápidos do SDK (Software Development Kit) do Microsoft .NET. 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, o Visual Studio .NET 2003 ou o Visual Studio 2005.
No menu Arquivo , aponte para Novoe clique em Projeto.
A caixa de diálogo Novo Projeto aparecerá.
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 o Visual C++.
Em Modelos, clique em Aplicativo C++ Gerenciado se estiver usando o Visual Studio .NET 2002.
Em Modelos, clique em Aplicativo de Console (.NET) se estiver usando o Visual Studio .NET 2003.
Em Modelos, clique em Aplicativo de Console CLR se estiver usando o Visual Studio 2005.
Na caixa Nome, digite Q815658 e clique em OK.
Adicione uma referência a
System.xml.dll
no 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
System::Xml
namespace da seguinte maneira:using namespace System::Xml;
Você faz isso para não precisar qualificar as
XmlTextReader
declaraçõ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
XmlTextReader
objeto. Preencha oXmlTextReader
objeto com o arquivo .xml.Normalmente, a
XmlTextReader
classe é usada se você precisar acessar os dados XML brutos sem a sobrecarga do DOM. Portanto, aXmlTextReader
classe fornece uma maneira mais rápida de ler os dados XML. AXmlTextReader
classe tem diferentesconstructors
que especificam o local dos dados XML.O código a seguir cria uma instância da
XmlTextReader
classe e, em seguida, carrega o arquivo Books.xml . Adicione o seguinte código à função_tmain
:XmlTextReader* reader = new XmlTextReader ("books.xml");
Observação
No Visual C++ 2005, a
_tmain
função é alterada para a função main.Leia os dados XML.
Observação
Esta etapa demonstra um loop while externo. As duas etapas que seguem esta etapa demonstram como usar o loop while para ler os dados XML.
Depois de criar o
XmlTextReader
objeto, 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 atinja o 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
NodeType
partir da propriedade. AName
propriedade e aValue
propriedade retornam as seguintes informações para o nó atual ou para o registro atual:- O nome do nó que é o nome do elemento e o nome do atributo.
- O valor do nó que é o texto do nó.
A
NodeType
enumeraçã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 os atributos do 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 atributo associados aos tipos de nó de elemento. O
MovetoNextAttribute
método se move sequencialmente por cada atributo no elemento. Use aHasAttributes
propriedade para testar se o nó tem algum atributo. AAttributeCount
propriedade retorna 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 ao 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 ao Common Language Runtime no Visual C++ 2005, siga estas etapas:
Clique em Projeto e, em seguida, clique em< Propriedades do NomeDoProjeto>.
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 ao Common Language Runtime, Sintaxe Antiga (/clr:oldSyntax) na configuração do projeto de suporte do Common Language Runtime no painel direito, clique em Aplicar e em OK.
Para obter mais informações sobre a opção do compilador de suporte ao Common Language Runtime, consulte /clr (Compilação do Common Language Runtime).
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:
Ocorreu uma exceção sem tratamento do tipo System.Xml.XmlException em System.xml.dll Informações adicionais: Erro do sistema.
Referências
Para obter mais informações sobre como ler XML com o XmlReader, consulte Lendo XML com o XmlReader.