Leia os dados XML de um arquivo usando o Visual C++
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 da 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 os pacotes de serviço, software, infraestrutura de rede e hardware recomendados 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 que está incluído com o Microsoft .NET Software Development Kit (SDK) QuickStarts. 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, em seguida, clique em Project.
A caixa de diálogo New Project é exibida.
Em Tipos de Projeto, clique em Projetos do Visual C++.
Observação
No Visual Studio 2005, o Visual C++ Projects é alterado 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.dll
no projeto. Para obter mais informações sobre como adicionar referências a um projeto gerenciado do Visual C++, confira Adicionar referências a um projeto gerenciado do Visual C++Especifique a diretiva de uso no namespace da
System::Xml
seguinte maneira:using namespace System::Xml;
Você faz isso para que não precise qualificar as
XmlTextReader
declarações de classe mais tarde em seu código. Você deve usar a diretiva de uso 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 diferenteconstructors
que especifica o local dos dados XML.O código a seguir cria uma instância da
XmlTextReader
classe e carrega o arquivoBooks.xml . Adicione o seguinte código à_tmain
função: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 externo. As duas etapas que seguem esta etapa demonstram como usar o loop de tempo 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 mover-se 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 na
NodeType
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 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 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 atributos. 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. Crie 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 de runtime de linguagem comum (/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 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 ao 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 não tratada do tipo System.Xml. XmlException ocorreu 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 Leitura XML com o XmlReader.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários