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:

  1. Inicie o Visual Studio .NET 2002, Visual Studio .NET 2003 ou Visual Studio 2005.

  2. No menu arquivo, aponte para novo e, em seguida, clique em Project.

    A caixa de diálogo New Project é exibida.

  3. Em Tipos de Projeto, clique em Projetos do Visual C++.

    Observação

    No Visual Studio 2005, o Visual C++ Projects é alterado para Visual C++.

  4. 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.

  5. Na caixa Nome , digite Q815658 e clique em OK.

  6. 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++

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

  8. Crie uma instância do XmlTextReader objeto. Preencha o XmlTextReader objeto com o arquivo .xml.

    Normalmente, a XmlTextReader classe é usada se você precisar acessar os dados XML brutos sem a sobrecarga do DOM. Portanto, a XmlTextReader classe fornece uma maneira mais rápida de ler os dados XML. A XmlTextReader classe tem diferente constructors 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.

  9. 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);
    }
    
  10. Examine os nós.

    Para processar os dados XML, cada registro tem um tipo de nó que pode ser determinado na NodeType propriedade. A Name propriedade e a Value 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;
        }
    }
    
  11. 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 a HasAttributes propriedade para testar se o nó tem atributos. A AttributeCount 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;
        }
    }
    
  12. Salve a solução. Crie a solução.

  13. 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:

  1. Clique em Projeto e clique <em Propriedades do ProjectName> .

    Observação

    <ProjectName> é um espaço reservado para o nome do projeto.

  2. Expanda Propriedades de Configuração e clique em Geral.

  3. 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.