C#
- Operações básicas com XML (revisão)
Neste artigo eu vou rever algumas operações básicas com arquivos XML usando a linguagem C#. Iremos mostrar como exibir um arquivo xml no controle ListView e como gerar um arquivo XML exibindo-o em um ListBox.
Em todos os exemplos eu estou usando o Visual Studio 2012 for Windows desktop.
Abra o Visual Studio 2012 for Windows desktop e clique em New Project;
Clique em Visual Studio Solutions e selecione Blank Solution informando o nome XML_CSharp e clicando no botão OK;
![]() |
Dessa forma teremos uma solução a partir da qual iremos incluir os projetos deste artigo.
Os conceitos básicos sobre XML podem ser vistos nas referências do artigo.
1- Vinculando uma fonte de dados XML ao controle ListView
No menu File clique Add -> New Project e a seguir escolha Visua C# -> Windows e o template Windows Forms Application informando o nome XML_ListView e clique em OK;
Isso irá criar um novo projeto à nossa solução.
![]() |
Vamos criar um arquivo XML para usar como exemplo no projeto.
No menu PROJECT clique em Add New Item e selecione Visual C# Items -> XML File e informe o nome Funcionarios.xml clique em Add;
![]() |
A seguir defina a estrutura do arquivo Funcionarios.xml conforme mostra a figura abaixo:
![]() |
No formulário form1.cs do projeto inclua os seguintes controles:
Defina os controles conforme o leiaute abaixo:
![]() |
No evento Load do formulário inclua o código abaixo que define um cabeçalho para o controle ListView:
private void Form1_Load(object sender, EventArgs e) { lvFunci.View = View.Details; lvFunci.GridLines = true; lvFunci.FullRowSelect = true; lvFunci.Columns.Add("Codigo", 100); lvFunci.Columns.Add("Nome", 100); lvFunci.Columns.Add("Cargo", 100); lvFunci.Columns.Add("Setor", 100); lvFunci.Columns.Add("Salário", 50); lvFunci.Columns.Add("Commissão", 50); } |
No evento Click do botão Carregar XML inclua o código abaixo:
private void btnCarregarXML_Click(object sender, EventArgs e) { try { DataSet ds = new DataSet(); ds.ReadXml(@"c:\dados\Funcionarios.xml"); ListViewItem item; foreach (DataRow dr in ds.Tables["funci"].Rows) { item = new ListViewItem(new string[] { dr["Codigo"].ToString(), dr["Nome"].ToString(), dr["Cargo"].ToString(), dr["Setor"].ToString(), dr["Salario"].ToString(), dr["Comissao"].ToString()}); lvFunci.Items.Add(item); } } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message.ToString(), "Erro", MessageBoxButtons.OK); } } |
O código acima usa o método ReadXML que lê o esquema e os dados do XML em um dataset.
Cada Nó <funci> será tratado como um item do ListView equivalendo a uma linha de uma tabela; por isso percorremos as linhas do datatable: ds.Tables["funci"].Rows
No botão Fechar inclua o código abaixo:
private void btnFechar_Click(object sender, EventArgs e) { this.Close(); } |
Executando o projeto teremos:
![]() |
2- Criando um arquivo XML a partir de um DataSet e exibindo em um ListBox
Para realizar esta tarefa iremos usar o método WriteXml que grava os dados atuais (o esquema e dados) de um objeto DataSet para um arquivo XML. Este é um método sobrecarregado. Usando esse método, você pode gravar dados em um arquivo, fluxo, TextWriter ou XmlWriter.
O trecho de código a seguir grava um conteúdo do conjunto de dados para um arquivo XML usando o método WriteXml:
DataSet
ds = CriarDataSet();
ds.WriteXml(@"C:\Dados\Alunos.xml");
No menu File clique Add -> New Project e a seguir escolha Visua C# -> Windows e o template Windows Forms Application informando o nome XML_DataSet e clique em OK;
No formulário form1.cs do projeto inclua os seguintes controles:
![]() |
A seguir no evento click do botão Gerar XML:
private void btnGeraXML_Click(object sender, EventArgs e) { DataSet ds = CriarDataSet(); ds.WriteXml(@"C:\dados\Alunos.xml"); exibeXML(); } |
O código acima chama a rotina CriarDataSet() e usa o método WriteXML para gerar um arquivo xml na pasta c:\dados com o nome alunos.xml.
A rotina CriarDataSet() define um DataSet e cria um datatable com duas colunas Nome e Endereco atribuindo valores e retornando o dataset:
private DataSet CriarDataSet() { //cria um dataset DataSet ds = new DataSet("aluno"); try { ds.Namespace = "AlunoNamespace"; //define a tabela DataTable tabelaBasica = new DataTable("Aluno"); //define as colunas DataColumn col1 = new DataColumn("Nome"); DataColumn col2 = new DataColumn("Endereco"); //inclua as colunas na tabela tabelaBasica.Columns.Add(col1); tabelaBasica.Columns.Add(col2); ds.Tables.Add(tabelaBasica); //inclua uma nova linha e atribui valores as colunas da tabela DataRow novaLinha; novaLinha = tabelaBasica.NewRow(); novaLinha["Nome"] = "Jose Carlos Macoratti"; novaLinha["Endereco"] = "Rua Projetada, 100"; tabelaBasica.Rows.Add(novaLinha); novaLinha = tabelaBasica.NewRow(); novaLinha["Nome"] = "Miriam Estela Lima"; novaLinha["Endereco"] = "Alameda Santos, 45"; tabelaBasica.Rows.Add(novaLinha); novaLinha = tabelaBasica.NewRow(); novaLinha["Nome"] = "Jefferson Andre Bueno"; novaLinha["Endereco"] = "Av. XV de Novembro 109"; tabelaBasica.Rows.Add(novaLinha); ds.AcceptChanges(); return ds; } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message.ToString(), "Erro", MessageBoxButtons.OK); return ds; } } |
O código da rotina exibeXML() que lê o arquivo alunos.xml e exibe os dados no controle ListBox:
private void exibeXML() { try { ArrayList ar = new ArrayList(); XmlTextReader reader = new XmlTextReader(@"C:\dados\alunos.xml"); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Text) { ar.Add(reader.Value); } } lbXML.DataSource = ar; } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message.ToString(), "Erro", MessageBoxButtons.OK); } } |
Executando projeto iremos obter o resultado abaixo:
![]() |
O arquivo alunos.xml gerado possui a seguinte estrutura:
<?xml version="1.0" standalone="yes"?> <aluno xmlns="AlunoNamespace"> <Aluno> <Nome>Jose Carlos Macoratti</Nome> <Endereco>Rua Projetada, 100</Endereco> </Aluno> <Aluno> <Nome>Miriam Estela Lima</Nome> <Endereco>Alameda Santos, 45</Endereco> </Aluno> <Aluno> <Nome>Jefferson Andre Bueno</Nome> <Endereco>Av. XV de Novembro 109</Endereco> </Aluno> </aluno> |
3- Gerando XML a partir de uma fonte de dados relacional
Vamos agora mostrar como podemos gerar um arquivo XML a partir de uma tabela de um banco de dados relacional exibindo o resultado em um controle DataGridView.
Vamos usar o método WriteXML da classe DataSet que escreve o conteúdo do dataset para um arquivo XML.
No menu File clique Add -> New Project e a seguir escolha Visua C# -> Windows e o template Windows Forms Application informando o nome XML_Relacional e clique em OK;
No formulário form1.cs do projeto inclua os seguintes controles:
Define o leiaute do formulário conforme a figura abaixo:
![]() |
1- Gerando XML a partir do Microsoft Access
Vou usar um banco de dados Northwind.mdb e acessar a tabela Customers:
Defina os namespaces :
using
System.Data;
using System.Data.OleDb;
No botão btnGerarXML_Access inclua o código a seguir:
private void btnGerarXML_Access_Click(object sender, EventArgs e) { try { string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dados\Northwind.mdb"; OleDbConnection conexaoOleDb = new OleDbConnection(); conexaoOleDb.ConnectionString = connString; // cria um data adapter OleDbDataAdapter da = new OleDbDataAdapter("Select * from Customers", conexaoOleDb); // cria new dataset DataSet ds = new DataSet(); // preenche o dataset da.Fill(ds, "Customers"); // escreve o conteudo do dataset para um arquivo xml ds.WriteXml(@"C:\dados\ClientesNorthwind.xml"); exibeXML("ClientesNorthwind.xml"); } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message.ToString(), "Erro", MessageBoxButtons.OK); } } |
O código acima acessa a tabela Customers selecionando todos os registros e gerando um dataset.
A seguir o método WriteXml do dataset gera o XML na pasta c:\dados;
Abrindo o arquivo gerado no controle DataGridView temos o resultado abaixo:
![]() |
2- Gerando XML a partir do SQL Server
Vou usar um banco de dados Cadastro.mdf e acessar a tabela Contatos:
Defina os namespaces :
using
System.Data;
using System.Data.SqlClient;
No botão btnGerarXML_SqlServer inclua o código a seguir:
private void btnGerarXML_SQLServer_Click(object sender, EventArgs e) { try { string connString = @"Data Source=.\sqlexpress;Initial Catalog=Cadastro;Integrated Security=True"; SqlConnection conexaoSQLServer = new SqlConnection(); conexaoOleDb.ConnectionString = connString; // cria um data adapter SqlDataAdapter da = new SqlDataAdapter("Select * from Contatos", conexaoSQLServer); // cria new dataset DataSet ds = new DataSet(); // preenche o dataset da.Fill(ds, "Contatos"); // escreve o conteudo do dataset para um arquivo xml ds.WriteXml(@"C:\dados\ContatosSQLServer.xml"); exibeXML("ContatosSQLServer.xml"); } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message.ToString(), "Erro", MessageBoxButtons.OK); } } |
O procedimento é o mesmo usado para o banco de dados Access o que muda é a string de conexão e o provedor SqlClient.
Abaixo temos o resultado da exibição do arquivo XML no datagridview:
![]() |
A rotina para exibir o arquivo XML gerado possui o seguinte código:
private void exibeXML(string nomeArquivoXML) { dgvXML.DataSource = null; DataSet dataSet = new DataSet(); dataSet.ReadXml(@"C:\dados\" + nomeArquivoXML ); dgvXML.DataSource = dataSet.Tables[0]; } |
O método ReadXML do dataset lê o arquivo XML e exibe no controle.
Pegue o projeto completo
aqui:
XML_CSharp.zip
João 5:45
Não penseis que eu vos hei de acusar perante o Pai. Há um que vos acusa, Moisés, em quem vós esperais.João 5:46
Pois se crêsseis em Moisés, creríeis em mim; porque de mim ele escreveu.João 5:47
Mas, se não credes nos escritos, como crereis nas minhas palavras?
Veja os
Destaques e novidades do
SUPER DVD Visual Basic (sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#. Veja também os Cursos com vídeo aulas e projetos exemplos: |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: