Importando XML com o XMLDocument - Delphi

Veja neste artigo onde vamos falar sobre o XML, na verdade vamos ver como importar um XML para o Delphi.

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:

Figura 1. Layout do Formulário.

Vou descrever agora qual será minha ideia resumidamente:

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.

Artigos relacionados