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;
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;
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:
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.
Pode enviar sim, te mandei um e-mail, é só responder ele!
Amigo desde já obrigado seu post foi muito util
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
Say, you got a nice article post.Much thanks again. Really Great.
envia pra min código fonte , rodrigo_vi@hotmail.com
estudar
Opa rodrigo, infelizmente não tenho mais o código fonte.
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
eu preciso rs, ti-raphael@hotmail.com
Boa Noite Prezado Wellington,
Tudo bem? Seria possível me mandar o Código-fonte para meu e-mail: stiaojsn@gmail.com
Desde já agradeço!
Obrigado!
Ola Wellington, se tiver como mandar, neste email: marciosystem@gmail.com
muito bom o artigo,,, parabens
se puder me enviar o fonte fico agradecido…
byluizgust@gmail.com
Boa tarde,
poderia me fornecer o codigo fonte, agradeço
opa me manda o codigo fonte desse leitor de xml
pode me enviar o código fonte ?
Poderia me enviar o código fonte ? Por favor !
ph.Oliveira46@gmail.com
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');
Wellington. Bom dia e feliz Natal.
Se ainda estiver disponível poderia me fornecer os fontes?
Meu email: gavelc@gmail.com
Abraço.
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?
vc tem o fonte desse exemplo ?!
Não tenho mais, faz muito tempo que fiz este tutorial, e na época eu não usava GitHub. Desculpe.
envia pra min código fonte , wagnerss2012@hotmail.com
Show de bola,
Envia por favor o código fonte pra mim. Desde já agradeço.
Bom dia
Não estou conseguindo baixar o fonte. Poderia enviar para mim? aleleu@gmail.com
Post 100% Útil, parabéns!
Ola amigo, poderia me mandar o código fonte:
Willian.douglas@outlook.com
Infelizmente não tenho mais esse código.
ESTA SALVANDO MAS COMO VIZUALIZO ESSE ARQUIVO GERADO ???