Usar o Visual C# para ler dados XML de uma URL
Este artigo mostra como usar a XmlTextReader
classe para ler XML de uma URL. As informações transmitidas podem vir de todos os tipos de fontes, como um fluxo de bytes de um servidor, um arquivo ou uma TextReader
classe.
Versão original do produto: Visual Studio
Número de KB original: 307643
Requisitos
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
- Microsoft Visual Studio
- Terminologia XML
- Criando e lendo XML
- URLs e criação de um ponto de extremidade XML
Este artigo refere-se ao namespace System.Xml
da Biblioteca de Classes .NET Framework .
Como ler dados XML de uma URL
Este exemplo 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 SDK (Kit de Desenvolvimento de Software do .NET) Guias de Início Rápido. Esse arquivo também está disponível para download; Consulte o primeiro item na seção Referências deste artigo para o local de download.
Copie o arquivoBooks.xml para a
\Inetpub\Wwwroot
pasta em seu computador.Abra o Visual Studio.
Crie um novo aplicativo de console do Visual C#. Você pode continuar na seção Concluir listagem de código ou continuar por estas etapas para criar o aplicativo.
Especifique a diretiva de uso no
System.Xml
namespace para que você não seja obrigado a qualificar as declarações deXmlTextReader
classe posteriormente em seu código. Você deve usar a diretiva de uso antes de qualquer outra declaração.using System.Xml;
Recupere o fluxo XML por meio de uma URL. Os fluxos são usados para fornecer independência do dispositivo; Portanto, as alterações de programa não serão necessárias se a origem de um fluxo for alterada. Declare uma constante para a
http://localhost/books.xml
URL. Você usará a constante na próxima etapa comXmlTextReader
. Adicione o seguinte exemplo de código ao procedimento main da classe padrão:String URLString = "http://localhost/books.xml";
Crie uma instância da
XmlTextReader
classe e especifique a URL. Normalmente,XmlTextReader
é usado se você precisar acessar o XML como dados brutos sem a sobrecarga de um DOM (Modelo de Objeto de Documento); portanto,XmlTextReader
fornece um mecanismo mais rápido para ler o XML. AXmlTextReader
classe tem construtores diferentes para especificar o local dos dados XML. O código a seguir cria uma instância de umXmlTextReader
objeto e passa a URL para o construtor:XmlTextReader reader = new XmlTextReader (URLString);
Leia o XML.
Observação
Esta etapa mostra um loop básico e externo
while
e as duas próximas etapas descrevem como usar esse loop e ler XML.Depois de carregado,
XmlTextReader
executa leituras sequenciais para mover os dados XML e usa oRead
método para obter o próximo registro. ORead
método retornará false se não houver mais registros.while (reader.Read()) { // Do some work here on the data. Console.WriteLine(reader.Name); } Console.ReadLine();
Inspecione os nós. Para processar os dados XML, cada registro tem um tipo de nó que pode ser determinado na
NodeType
propriedade. AsName
propriedades eValue
retornam o nome do nó (os nomes de elemento e atributo) e o valor do nó (o texto do nó) do nó atual (ou registro). ANodeType
enumeração determina o tipo de nó. O código de exemplo a seguir exibe o nome dos elementos e o tipo de documento.Observação
Este exemplo ignora atributos de elemento.
while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element. Console.Write("<" + 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("</" + reader.Name); Console.WriteLine(">"); break; } }
Inspecione os atributos. Os tipos de nó de elemento podem incluir uma lista de nós de atributo associados a eles. O
MovetoNextAttribute
método se move sequencialmente por meio de 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("<" + reader.Name); while (reader.MoveToNextAttribute()) // Read the attributes. Console.Write(" " + reader.Name + "='" + reader.Value + "'"); Console.Write(">"); 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("</" + reader.Name); Console.WriteLine(">"); break; } }
Crie e execute seu projeto.
Lista de código completa
using System;
using System.Xml;
namespace ReadXMLfromURL
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
static void Main(string[] args)
{
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("<" + reader.Name);
while (reader.MoveToNextAttribute()) // Read the attributes.
Console.Write(" " + reader.Name + "='" + reader.Value + "'");
Console.Write(">");
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("</" + reader.Name);
Console.WriteLine(">");
break;
}
}
}
}
}
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 testar o código, você pode receber a seguinte mensagem de erro de exceção:
Uma exceção não tratada do tipo System.Xml. XmlException ocorreu em system.xml.dll Informações adicionais: declaração XML inesperada. A declaração XML deve ser o primeiro nó no documento e nenhum caractere de espaço em branco pode ser exibido antes dele. Linha 1, posição 4.
O erro de exceção ocorre na linha de código a seguir.
while (reader.Read())
Para resolve o erro de exceção, remova o caractere de espaço em branco que precede o primeiro nó no documento Books.xml.