Como ler dados XML a partir de uma URL usando o Visual C++

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 815659
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 307643.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 301232.

NESTA TAREFA

Sumário
Este artigo descreve como usar a classe XmlTextReader para ler o XML de um URL. As informações em fluxo podem vir de uma variedade de fontes, como um fluxo de bytes de um servidor, de um arquivo ou de uma classe TextReader .

back to the top

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Terminologia XML
  • Criar e ler XML
  • URLs e criar um ponto de extremidade XML
back to the top

Como ler dados XML a partir de uma URL

Este exemplo usa um arquivo chamado Books.XML. Você pode criar seu próprio arquivo Books.XML ou você pode usar o arquivo de exemplo que acompanha o Microsoft .NET Framework Software Development Kit (SDK) QuickStarts. Você também pode fazer o download Books.XML. Para baixar esse arquivo, consulte a seção References deste artigo.
  1. Copie o arquivo Books.XML para a pasta \Inetpub\wwwroot no seu computador.
  2. Inicie o Visual Studio .NET ou Visual Studio 2005.
  3. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  4. No Visual Studio .NET 2002, clique em Projetos do Visual c++ em Tipos de projeto e, em seguida, clique em Aplicativo de C++ gerenciado em modelos .

    No Visual Studio .NET 2003, clique em Projetos do Visual c++ em Tipos de projeto e, em seguida, clique em Aplicativo de console (NET) em modelos .

    No Visual C++ 2005, siga estas etapas:
    1. Em Project Types , clique em Visual C++ .
    2. Em modelos , clique em Aplicativo de console CLR .
    Observação Você poderá continuar a seção de Complete code listing ou você pode continuar estas etapas para criar o aplicativo.
  5. Adicione uma referência para o arquivo System.XML.dll no projeto. Para obter informações adicionais sobre como adicionar referências a um projeto de aplicativo Managed C++, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    310674COMO: Adicionar referências a um projeto gerenciado do Visual C++
  6. Especificar a diretiva usando no espaço para nome System.XML para que você não tem que qualificar as declarações de classe XmlTextReader posteriormente no seu código. Você deve usar a diretiva usando antes de qualquer outro declarações.
    using namespace System::Xml;
  7. Recupere o fluxo XML com uma URL. Fluxos são usados para fornecer independência do dispositivo. Portanto, as alterações do programa não são necessárias se a origem de um fluxo é alterada. Declare uma constante para o URL http://localhost/books.xml. Você usará essa constante na próxima etapa com a classe XmlTextReader . Adicione o código de exemplo a seguir para a função _tmain :

    Observação No Visual C++ 2005, adicione o código de exemplo a seguir para a função principal .
    String* URLString = "http://localhost/books.xml";
  8. Criar uma instância da classe XmlTextReader e, em seguida, especifique a URL. Normalmente, a classe XmlTextReader é usada se você deve acessar o XML como dados não processados sem a sobrecarga de um DOM (Document Object Model). Portanto, a classe XmlTextReader fornece um mecanismo mais rápido para ler o XML. A classe XmlTextReader tem construtores diferentes para especificar o local dos dados XML. O código a seguir cria uma instância de um objeto XmlTextReader e passa a URL para o construtor:
    XmlTextReader *reader = new XmlTextReader (URLString);
  9. Leia o XML. Observe que esta etapa mostra um básico, externa ao loop e que as próximas duas etapas descrevem como usar esse loop e como ler o XML. Depois que ele é carregado, a classe XmlTextReader executa leituras seqüenciais para mover entre os dados XML e usa o método Read para obter o próximo registro. O método Read retorna false se não houver não mais registros.
    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 da propriedade NodeType . O nome e as propriedades de valor retornam o nome do nó (os nomes de elemento e atributo) e o valor do nó (o texto de nó) do atual nó (ou registro). A enumeração NodeType determina o tipo de nó. O código de exemplo a seguir exibe o nome dos elementos e o tipo de documento. Observe que esse exemplo ignora 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;	}}
  11. Examine os atributos. Tipos de nó de elemento podem incluir uma lista de nós de atributo que estão associados eles. O método MovetoNextAttribute seqüencialmente move através de cada atributo no elemento. Use a propriedade HasAttributes para testar se o nó tem os atributos. A propriedade AttributeCount 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. Salvar e criar a solução
  13. Pressione CTRL+F5 para executar o aplicativo.
back to the top

Concluída a listagem de código no Visual C++. NET

#include "stdafx.h"#include <tchar.h>#using <mscorlib.dll>#using <System.Xml.dll>using namespace System;using namespace System::Xml;void _tmain(void){    String *URLString = "http://localhost/books.xml";    XmlTextReader *reader = new XmlTextReader (URLString);    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 de compilador de suporte de tempo de execução idioma comum ( / CLR: oldSyntax ) no Visual C++ 2005 a compilar com êxito este exemplo de código. Para fazer isso, execute as seguintes etapas:
  1. Clique em projeto e, em seguida, clique em propriedades ProjectName .

    Observação ProjectName representa o nome do projeto.
  2. Expanda Configuration Properties e, em seguida, clique em Geral .
  3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime definindo no painel à direita, clique em Aplicar e em seguida, clique em OK .
Para obter mais informações sobre o common language runtime oferece suporte às opções de compilador, visite o seguinte site:
CLR (common idioma tempo de execução compilação)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Estas etapas se aplicam o artigo inteiro.

back to the top

Exemplo de saída

Observação O arquivo Books.XML que está incluído no SDK do .NET Framework é ligeiramente diferente do arquivo que você pode fazer o download na seção References deste artigo. O arquivo que você pode baixar neste artigo não tem um atributo publicationdate ou um atributo de ISBN .
<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>
back to the top

Solução de problemas

Quando você executa este código, você receberá a seguinte mensagem de erro:
Uma exceção sem tratamento do tipo 'System.Net.WebException' ocorreu na system.xml.dll
Obter informações adicionais: O servidor remoto retornou um erro: (401) não autorizado.
Isso pode ocorrer se você desativar o acesso anônimo para o diretório virtual. Para resolver esse problema, permitir acesso anônimo para o diretório virtual ou use a propriedade XmlResolver para especificar as credenciais que você deve ter para acessar o arquivo. O código a seguir é um exemplo: resolução
XmlUrlResolver* resolver = new XmlUrlResolver();NetworkCredential* nc = new NetworkCredential("username", "password", "domain");resolver->Credentials=nc; //CredentialCache::DefaultCredentials if  you want to use the current users's credentialreader->XmlResolver= resolver;
você também pode receber a seguinte mensagem de erro:
Ocorreu uma exceção sem tratamento do tipo 'System.Xml.XmlException' na system.xml.dll informações adicionais: erro do sistema.
Você receberá essa mensagem de erro se você usar o arquivo Books.XML que você pode baixar na seção References. Você recebe essa mensagem de erro porque o arquivo Books.XML possui um espaço em branco no início do arquivo. Para corrigir o problema, abra o arquivo Books.XML em um editor de texto e, em seguida, remova o espaço em branco.

back to the top

REFERÊNCIAS

O seguinte arquivo está disponível para download no Centro de download da Microsoft:
DownloadDownload the Books.xml package now.Para obter informações adicionais sobre como fazer o download suporte da Microsoft arquivos, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
119591Como obter arquivos de suporte da Microsoft a partir de serviços online
Microsoft examinou esse arquivo em busca de vírus. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o arquivo foi publicado. O arquivo é armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo. Para obter mais informações sobre a classe XmlReader , visite o seguinte site da Web Microsoft Developer Network (MSDN):Para obter mais informações sobre como usar a classe XmlReader para ler dados XML, visite o seguinte site da MSDN:back to the top
url do XML XmlTextReader XmlReader

Propriedades

ID do Artigo: 815659 - Última Revisão: 11/14/2007 06:26:28 - Revisão: 2.3

Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ 2005 Express Edition

  • kbmt kbdownload kberrmsg kbxml kbcode kbhowtomaster kbhowto KB815659 KbMtpt
Comentários