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 )
Layout do Formulário

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.

Exemplo funcionando sem o carregamento dos TLabeledEdit

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

Carregando dados nos TLabeledEdit

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.