Olá pessoal, venho escrevendo mais um artigo sobre Delphi, onde neste artigo vamos falar sobre o XML, na verdade vamos ver como importar um XML para o Delphi.
Introdução
Para isso vamos precisar sem sombra de dúvidas de um XML. Para facilitar a vida de todos, vou criar aqui um pequeno XML. Basta copiar e colar o mesmo num bloco de notas e salvar com o nome ExemploXML.xml, ou algum outro nome de sua preferência.
Listagem 1: Criando o XML
<?xml version="1.0" encoding="ISO8859-1" ?>
<MENSAGEM>
<AVISO>
<DE>Wesley</DE>
<PARA>Henrylle</PARA>
<CABECALHO>Entregar Vìdeo Aula</CABECALHO>
<CORPO>Estou aguardando a entrega das vídeos</CORPO>
</AVISO>
<AVISO>
<DE>Wesley</DE>
<PARA>Rafael Silva</PARA>
<CABECALHO>Entregar Artigo</CABECALHO>
<CORPO>Estou aguardando a entrega dos artigos</CORPO>
</AVISO>
<AVISO>
<DE>Rafael Silva</DE>
<PARA>Wesley</PARA>
<CABECALHO>Re: Entregar Artigo</CABECALHO>
<CORPO>Seguem os artigos conforme combinado</CORPO>
</AVISO>
<AVISO>
<DE>Henrylle</DE>
<PARA>Wesley</PARA>
<CABECALHO>Re: Entregar Vìdeo Aula</CABECALHO>
<CORPO>Seguem as vídeo aulas conforme combinado</CORPO>
</AVISO>
</MENSAGEM>
Nota: Não é o objetivo explicar o que é um XML ou sua estrutura.
Agora sejamos práticos, vamos ao Delphi, criando um formulário com o seguinte layout, e salvando o seu form com o nome de uFrmPrincipal.pas.
Observe que temos neste formulário:
- 5 TLabeledEdit (EdtPara, EdtDe, EdtCabecalho, EdtCorpo)
- 1 TOpenDialog (OpenDialog1 )
- 1 TBitBtn ( BtnCarregarXML)
- 1 TListBox ( LstbxDados )
- 1 TXMLDocument (XMLDocument1 )
Figura 1. Layout do Formulário.
Vou descrever agora qual será minha ideia resumidamente:
- 1 - Iremos clicar no BtnCarregarXML
- 2 - Logo em seguida fazemos a criação de uma classe, chamada TMensagem, com a mesma estrutura do XML
- 3 - Será criado vários objetos do tipo TMensagem, e estes vão ser armazenados no LstbxDados
- 4 - Quando selecionarmos um item no nosso LstbxDados os dados vão ser exibidos nos TLabeledEdit
Agora que vimos o roteiro vamos implementar.
Criando a Classe TMensagem
Listagem 2: Declarando a Classe TMensagem
unit uFrmPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls, Buttons, ExtCtrls;
type
TMensagem = class
private
FCorpo: String;
FCabecalho: String;
FPara: String;
FDe: String;
public
property Para : String read FPara write FPara;
property De : String read FDe write FDe;
property Cabecalho: String read FCabecalho write FCabecalho;
property Corpo : String read FCorpo write FCorpo;
end;
TFrmPrincipal = class(TForm)
BtnCarregarXML: TBitBtn;
OpenDialog1: TOpenDialog;
XMLDocument1: TXMLDocument;
Panel1: TPanel;
EdtPara: TLabeledEdit;
EdtDe: TLabeledEdit;
EdtCabecalho: TLabeledEdit;
EdtCorpo: TLabeledEdit;
Panel2: TPanel;
LstbxDados: TListBox;
Label1: TLabel;
procedure BtnCarregarXMLClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmPrincipal: TFrmPrincipal;
implementation
{$R *.dfm}
End.
Note que não foi criado nenhum método para leitura, vamos escrever e ler diretamente das nossas propriedades. Esta parte de read e write você pode encontrar num artigo que fiz no link Class: read e Write.
Vamos declarar agora uma procedure na seção private do nosso Formulário para que possamos carregar o XML.
Listagem 3: Declarando LoadXML
private
{ Private declarations }
procedure LoadXML;
public
{ Public declarations }
end;
Agora chegou a hora de implementar a nossa procedure para fazer o carregamento do XML dentro do LstbxDados.
Listagem 4: Implementação do LoadXML
procedure TFrmPrincipal.LoadXML;
Var
tempMensagem: TMensagem;
I : Integer;
begin
LstbxDados.Clear;
for I := 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do
begin
tempMensagem := TMensagem.Create;
with tempMensagem,
XMLDocument1,
XMLDocument1.DocumentElement.ChildNodes[I] do
begin
Para := ChildNodes['PARA'].Text;
De := ChildNodes['DE'].Text;
Cabecalho := ChildNodes['CABECALHO'].Text;
Corpo := ChildNodes['CORPO'].Text;
LstbxDados.Items.AddObject('Para: '+ Para, tempMensagem);
end;
end;
end;
Votando ao nosso projeto, vamos ao próximo passo, carregar o arquivo XML.
Carregando o Arquivo XML
Pra carregar é muito simples, no evento onClick do BtnCarregarXML, vamos implementar o código abaixo, que tem por finalidade abrir uma tela onde vamos localizar o XML e depois associar este arquivo na propriedade FIleName do XMLDocument1.
Listagem 5: Carregando o XML
procedure TFrmPrincipal.BtnCarregarXMLClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
XMLDocument1.FileName := OpenDialog1.FileName;
XMLDocument1.Active := True;
LoadXML;
end;
end;
Veja como esta nosso exemplo funcionando.
Figura 2. Exemplo funcionando sem o carregamento dos TLabeledEdit.
Carregando dados
Até este momento nosso exemplo funciona, porém ainda falta clicar duas vezes em um item do nosso LstbxDados, e é isso que vamos fazer agora para finalizar nosso exemplo.
Listagem 6: Carregando dados
procedure TFrmPrincipal.LstbxDadosDblClick(Sender: TObject);
begin
if Assigned(TMensagem(LstbxDados.Items.
Objects[LstbxDados.ItemIndex])) then
begin
with TMensagem(LstbxDados.Items.Objects[LstbxDados.ItemIndex]) do
begin
EdtPara.Text := Para;
EdtDe.Text := De;
EdtCabecalho.Text := Cabecalho;
EdtCorpo.Text := Corpo;
end;
end;
end;
Bom agora que finalizamos toda a codificação, temos o seguinte resultado
Figura 3. Carregando dados nos TLabeledEdit.
Conclusão
Este é um exemplo simples de como carregar os dados contidos em um arquivo XML dentro do Delphi, além de termos visto a criação de uma classe, e como trabalhar com objetos dentro do nosso TListBox.
Um abraço e até o nosso próximo artigo.