DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!

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.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?

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(path: String);
  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.


Wesley Yamazack
Coordenador Editorial Web03. Sócio/Diretor da Lithic Soluções LTDA. Analista/Desenvolvedor Delphi da Marinha do Brasil.
O que você achou deste post?

    4 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Fistsoft-sistemas Para Gestao Empresarial-ltda;
Boa tarde! porque não da certo eu abrir um arquivo .xml da NF-e com este mesmo código? poderia me orientar como eu faço para ler um aqruivo .xml da NF-e e importo para dentro de meu banco de dados firebird?
[há +1 mês] - Responder

 

[autor] Wesley Yamazack
Olá Fistsoft, o XML mostrado é um padrão, não sei como é o Layout do XML da NF-e, me envia o mesmo por e-mail para que eu possa dar uma analisada juntamente com você, meu e-mail wyamazack@devmedia.com.br

Um abraço
[há +1 mês] - Responder
 

Ione J. F. Neto
Olá amigo !
venho lhe fazer uma pergunta .... que é ....
Como posso usar um XML que criei no form1 por ex no form2 ...
sendo mais especifico eu criei um cadastro de produtos em um form1 e criei um outro form2 para pesquisar e queria poder abrir e exibir os dados de um xml nesse grid e procurei aqui de toda forma e não achei ....

desde já agradeço ....
[há 7 dias] - Responder

 

[autor] Wesley Yamazack
Opa Ione, obrigado pelo comentário :)

Bom, você chegou a fazer todo o meu exemplo num form só? Sugiro você fazer o exemplo, em seguida eu te ajudo a jogar os dados no outro form, o que acha?

Um abraço.
[há 7 dias] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
[Fechar] Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03