Neste artigo vou recordar como ler e acessar informações em arquivos XML usando a linguagem C#. |
Vamos usar a classe XMLTextReader para ler um arquivo XML. Esta classe é uma classe abstrata que fornece o acesso rápido a arquivos XML.
Nota: Basicamente podemos ler um arquivo XML usando XmlTextReader, XmlDocument e Xpath;
Se pensarmos que um arquivo XML é um arquivo que pode variar muito de conteúdo, do mais simples ao mais complexo, vamos concluir que ler um arquivo XML pode ser uma tarefa simples ou complexa dependendo do arquivo XML que desejamos ler, de quais informações do arquivo desejamos obter e do que desejamos fazer com a informação extraída do arquivo.
Pensando nisso este artigo se propõe a uma tarefa bem modesta: ler o conteúdo de arquivos XML exibindo os valores dos elementos (somente o texto dos elementos e de seus atributos) usando uma aplicação Windows Forms.
A idéia básica é usar a classe XMLTextReader para ler e percorrer o arquivo XML e inspecionar cada nó do arquivo verificando qual o seu tipo para podermos decidir qual informação desejamos exibir.
Se pensarmos em um documento XML como uma hierarquia de nós podemos encontrar os seguintes tipos de nós e de seus nós filhos em um documento XML:
Tipo de Nó | Descrição | Nós Filhos possíveis |
---|---|---|
Document | Representa o documento XML | Element (max. one), ProcessingInstruction, Comment, DocumentType |
DocumentFragment | Representa um documento uma porção do documento. | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
DocumentType | Fornece uma interface para as entidades definidas para o documento. | Nenhum |
ProcessingInstruction | Representa uma instrução de processamento. | Nenhum |
EntityReference | Representa uma referencia de entidade | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
Element | Representa um elemento | Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference |
Attr | Representa um atributo. | Text, EntityReference |
Text | Representa um conteúdo textual em um elemento ou atributo. | Nenhum |
CDATASection | Representa uma seção CDATA | Nenhum |
Comment | Representa um comentário | Nenhum |
Entity | Representa uma entidade | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
Notation | Representa uma notação declarada em um DTD | Nenhum |
Whitespace | Espaço em branco entre a marcação. | Nenhum |
EndElement | Nós EndElement são retornados ao final de um elemento. | Nenhum |
XmlDeclaration |
O nó XmlDeclaration deve ser o
primeiro nó no documento.Ele não pode ter filhos.Ele é um filho do
nó Document Ele pode ter atributos que provém versão e a codificação de informações. |
Nenhum |
Notation | Um nó de Notation não pode ter nenhum nó filho.Ele poderá aparecer como o filho do nó DocumentType | Nenhum |
Com base nisso uma das maneiras de obtermos informação de um arquivo XML é ler sequencialmente o arquivo e identifica qual o tipo de Nó e Nó filho o elemento possui extraindo a informação desejada.
Para inspecionar os nós usamos a enumeração NodeType que determina qual o tipo de Nó podendo obter o nome do Nó (elementos/atributos) usando a propriedade Name e o seu valor através da propriedade Value.
Para inspecionar os atributos de um nó podemos usar a propriedade HasAttributes para verificar se o Nó tem algum atributo e o método MoveToNextAttribute para mover-se sequencialmente através de cada atributo do elemento.
No exemplo deste artigo veremos como usar a classe XmlReader para analisar uma seqüência de caracteres XML.
O arquivo XML usado como exemplo chama-se Produtos.xml e esta localizado na raiz do projeto:
Recursos Usados
Criando o projeto Windows Forms
Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem C# e o template Windows Forms Application.
Informe um nome a seu gosto. Eu vou usar o nome Cshp_XML;
Selecione o formulário Form1.vb e partir da ToolBox inclua os seguintes controles:
1 LisbBox - lbDados
1 TextBox - Multiline = True, txtDados
1 Button = btnLeXml
Disponha os controles conforme o leiaute da figura abaixo:
A seguir declare os seguintes namespaces no formulário:
using System;
using System.IO;
using System.Windows.Forms;
using System.Xml;
No inicío do formulário vamos
declarar a variável caminhoArquivo que iremos usar para obter o
caminho do arquivo na raíz do projeto.
private string caminhoArquivo = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
Agorano evento Click do botão de comando - Ler XML - inclua o código abaixo:
private void btnLeXml_Click(object sender, EventArgs e)
{
//monta o caminho do arquivo na raiz do projeto
caminhoArquivo = Directory.GetParent(Directory.GetParent(caminhoArquivo).FullName).FullName;
caminhoArquivo += @"\produtos.xml";
XmlTextReader xmlReader = new XmlTextReader(caminhoArquivo);
while (xmlReader.Read())
{
switch (xmlReader.NodeType)
{
case XmlNodeType.Element:
lbDados.Items.Add("<" + xmlReader.Name + ">");
txtDados.Text += "<" + xmlReader.Name + ">" + Environment.NewLine;
break;
case XmlNodeType.Text:
lbDados.Items.Add(xmlReader.Value);
txtDados.Text += xmlReader.Value+ Environment.NewLine;
break;
case XmlNodeType.EndElement:
lbDados.Items.Add("<" + xmlReader.Name + ">");
txtDados.Text += "<" + xmlReader.Name + ">" + Environment.NewLine;
break;
}
}
}
|
Neste código usamos uma instância da classe XmlTextReader para ler o arquivo XML Produtos.xml na raiz do projeto. A leitura do arquivo é feita usando o método Read.
A seguir verificamos o tipo de Nó existente no arquivo e obtemos o valor do respectivo nó usando a propriedade Name e Value.
Estamos exibindo o resultado em um ListBox e em um TextBox.(No TextBox usamos a propriedade Environment.NewLine para incluir um caractere de nova linha)
Executando o projeto iremos obter o seguinte resultado:
Pegue o projeto completo aqui : Cshp_Xml.zip
Todas as coisas são puras para os
puros, mas nada é puro para os contaminados e infiéis; antes o seu
entendimento e consciência estão contaminados.
Confessam que conhecem a Deus, mas negam-no com as obras, sendo abomináveis,
e desobedientes, e reprovados para toda a boa obra.
Tito 1:15,16
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Acessando e Lendo arquivos XML recursivamente - Macoratti.net