XML com Delphi, lendo e escrevendo

Olá a todos os geeks, hoje vamos falar um pouco sobre como ler e escrever em arquivos XML usando o Delphi, mas você sabe o que é XML?

[button color=”white” size=”medium” link=”https://clubedosgeeks.com.br/uploads_demos/XMLdelphi/geeksxml.rar” target=”blank” ]Download do Código Fonte[/button]

O que é XML?

Curta a nossa página no Facebook:

XML, ou eXtensible Markup Language (Linguagem de marcação extensiva) é uma linguagem de marcação parecida com HTML usada para criação de documentos organizados hierarquicamente de texto, banco de dados, etc.. Esta linguagem é muito usada para a transferência de dados entre sistemas diferentes, principalmente no meio comercial e em sistemas financeiros, e é recomendada pela W3C para a comunicação entre aplicações WEB.

Lendo e escrevendo em arquivos XML com Delphi

Layout

1 – Para começar, com o Delphi aberto clique em File, no menu principal, depois em New >> VCL Forms Application – Delphi for Win32.
2 – Renomeio o Form conforme sua preferência salve a Unit e o projeto também com nomes a seu gosto, em uma pasta chamada projetoXML, na mesma pasta crie um arquivo com extensão .xml, usando um editor de texto de sua preferência, e salve-o em branco com o nome dados;
3 – De volta ao Delphi adicione dois elementos ao form, um Panel alinhado alTop, e um PageControl alinhado alClient, que deve ser renomeado para paginas.
4 – Adicione quatro BitBtn ao Panel, mude as propriedades Name e Caption deles para: btnCarregar, Carregar Arquivo (Bitbtn1), btnAdd, Adicionar Item(Bitbtn2), btnEditar, Editar Item(Bitbtn3), btnExcluir, Excluir Item(Bitbtn4). Os botões Adicionar Item, Editar Item e Excluir Item devem ter a propriedade Enable alterada para false;
5 – Adicione duas páginas no PageControl, clicando com o botão direito do mouse >> New Page. Edite as propriedades Name e Caption das páginas, um com TabListar e Listar, respectivamente, e outra com tabcadastro e Novo Cadastro.
6 – Dentro da página Listar coloque um componente DBGrid com a propriedade Align em alClient. Adicione também o nosso grande amigo ClientDataSet e um DataSource. O layout do programa deve ficar conforme está na figura 01;

Figura 01

Figura 01

7 – Ligue o DataSource ao ClientDataSet eo DBGrid ao DataSource;
8 – Na página Novo Cadastro Crie um formulário com dois Edits, que devem ter nomes de edtEstado e edtUF. Adicione dois Bitbtn, que devem ter as propriedades Name e Caption alteradas para: btnCancelar, Cancelar, e btnSalvar, Salvar. veja a figura 02;

Figura 02

Figura 02

Eventos dos botões

1 – No evento onClick do botão Carregar Arquivo cole este código:

ClientDataSet1.LoadFromFile('dados.xml');
btnAdd.Enabled:=true;
btnEditar.Enabled:=true;
btnExcluir.Enabled:=true;

Que na linha 1 faz a conexão do ClientDataSet com o arquivo XML, que deve estar na mesma pasta do projeto. E nas outras linha ele Habilita o uso dos botões restantes;
2 – No botão Adicionar Item, no evento onClick, coloque o seguinte código:

paginas.ActivePage:=tabcadastro;
btnCarregar.Enabled:=false;
btnEditar.Enabled:=false;
btnExcluir.Enabled:=false;
btnAdd.Enabled:=false;

Que na linha 1 faz a mudança da página de listagem para a página de cadastro, e nas linhas seguintes desabilita todos os botões do panel;
3 – No botão Editar, a única coisa que faremos é colocar o ClientDataSet em modo de edição, e a edição deverá acontecer na própria DBgrid, sem a necessidade um formulário. Use o código a seguir no evento onClick do botão Editar:

ClientDataSet1.Edit;

4 – No evento Onclik do botão excluir faremos apenas a exclusão do item do ClientDataSet e salvaremos o arquivo XML com a nova alteração, cole o seguinte código:

ClientDataSet1.Delete;
ClientDataSet1.SaveToFile('dados.xml',dfXML);

5 – No evento OnExit da DBGrid coloque o seguinte código:

ClientDataSet1.SaveToFile('dados.xml',dfXML);

6 – Agora na aba de cadastro, os botões Cancelar e Salvar terão os seguintes códigos:

procedure TForm3.btnCancelarClick(Sender: TObject);
begin
paginas.ActivePage:=Tablistar;
btnCarregar.Enabled:=true;
btnAdd.Enabled:=true;
btnEditar.Enabled:=true;
btnExcluir.Enabled:=true;
end;
procedure TForm3.btnSalvarClick(Sender: TObject);
begin
if ClientDataSet1.FieldCount=0 then
begin
  ClientDataSet1.FieldDefs.Clear;
  ClientDataSet1.FieldDefs.Add('Estado',ftString, 2,False);
  ClientDataSet1.FieldDefs.Add('NomeEstado', ftString, 30, false);
  ClientDataSet1.CreateDataSet;
end;
   ClientDataSet1.Append;
   ClientDataSet1.FieldByName('Estado').AsString:=edtUF.Text;
   ClientDataSet1.FieldByName('NomeEstado').AsString:=edtEstado.Text;
   ClientDataSet1.Post;
   ClientDataSet1.SaveToFile('dados.xml',dfXML);
   paginas.ActivePage:=Tablistar;
   btnCarregar.Enabled:=true;
   btnAdd.Enabled:=true;
   btnEditar.Enabled:=true;
   btnExcluir.Enabled:=true;
end;

Pronto, agora compile o código e faça o teste, se não funcionar você pode baixá-lo. Qualquer dúvida deixe um comentário.

[button color=”white” size=”medium” link=”https://clubedosgeeks.com.br/uploads_demos/XMLdelphi/geeksxml.rar” target=”blank” ]Download do Código Fonte[/button]
Curta a nossa página no Facebook:

Jayr Alencar

Doutorando em Ciências da Computação no Centro de Informática da Universidade Federal do Pernambuco (CIn - UFPE); Mestre pela mesma instituição; Formado em Análise e Desenvolvimento de Sistemas; Católico; Fã de O Senhor do Anéis.

Você pode gostar...

28 Resultados

  1. Lyandro disse:

    Gostaria de saber se eu lhe enviar um fonte em delphi e um xml tem como vc me ajudar na leitura que n”ao esta dando certo.

    Obrigado.

  2. Ricardo disse:

    Amigo desde já obrigado seu post foi muito util

  3. Ricardo disse:

    Amigo estou em grande apuros em um emprego novo to batendo muito a cabeça para criar um web service com o delphi você poderia criar um post com um exemplo? desde já agradeço

  4. Say, you got a nice article post.Much thanks again. Really Great.

  5. rodrigo disse:

    envia pra min código fonte , rodrigo_vi@hotmail.com

    estudar

  6. Wellington Telles disse:

    Muito bom, achei interessante o resultante do XML, só faltou o “Line Break” que ainda estou estudando, pois tudo em uma única linha não é muito visual, mesmo com “Line Break” que usei com Notepad++, o programa carrega o arquivo e isso é muito legal. Na hora de salvar ele volta ao formato inicial.

    Se alguém precisar do código fonte só falar

  7. Wellington Telles disse:

    Boa Tarde,

    Acrescentei essa função para que o XML tenha identação e fique em várias linhas:

    Procedure FormatXMLFile(XmlFile:string);
    var
    oXml : TXMLDocument;
    s : utf8String;
    begin
    oXml := TXMLDocument.Create(nil);
    try
    oXml.LoadFromFile(XmlFile);
    s := oxml.XML.Text;
    s := StringReplace(s, ‘>’ + #13#10 + ‘<' , [rfReplaceAll]);
    //oXml.XML.Text:=xmlDoc.FormatXMLData(oxml.XML.Text);
    oxml.XML.Text := s;
    oXml.Active := true;
    oXml.SaveToFile(XmlFile);
    finally
    oXml := nil;
    end;
    end;

    Depois no programa:
    Após :

    ClientDataSet1.SaveToFile('dados.xml',dfXML);
    FormatXMLFile('dados.xml');

  8. Emerson Luis Alves de Moraes disse:

    Boa tarde, muito bom esse exemplo que você fez de como usar o XML.
    Teria Como adicionar um sistema de pesquisa neste mesmo exemplo que você fez?

  9. Wagner disse:

    vc tem o fonte desse exemplo ?!

  10. Wagner disse:

    envia pra min código fonte , wagnerss2012@hotmail.com

  11. NEUMAR MORAES disse:

    Show de bola,

    Envia por favor o código fonte pra mim. Desde já agradeço.

  12. Alex disse:

    Bom dia
    Não estou conseguindo baixar o fonte. Poderia enviar para mim? aleleu@gmail.com

  13. Rogerio disse:

    Post 100% Útil, parabéns!

  14. willian disse:

    Ola amigo, poderia me mandar o código fonte:

    Willian.douglas@outlook.com

  15. Bruno Ravel disse:

    ESTA SALVANDO MAS COMO VIZUALIZO ESSE ARQUIVO GERADO ???

Deixe um comentário para Wagner Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *