XML de forma prática no Delphi

Nesse artigo explico como ler um arquivo XML de forma direta, sem OpenDialog com a finalidade de já ter o nome do XML, evitando que o usuário perca tempo em procurar este arquivo em uma pasta lotada de arquivos. usaremos nesse exemplo arquivos INI, com a finalidade de conter o endereço da pasta a qual estão gravados os XMLs. Um exemplo onde poderia ser usado este exemplo seria para leitura de arquivo XML do Danfe, mas o código lê qualquer arquivo XML.

Vamos então ao trabalho: vamos criar um arquivo INI para colocar o endereço de onde ficarão os arquivos XMLs.

Crie uma pasta na raiz do C:\ chamada XMLs e nela crie uma pasta para salvar o sistema.

Agora abra o Bloco de notas e coloque o caminho como abaixo:

[ler_xml]
    path=C:\XMLs\

Salve o arquivo do Bloco de notas como conf.ini , na pasta onde será salvo o sistema.

Crie um novo projeto (File/New/VCL Forms Application – Delphi) e coloque no Formulário um Label , um Edit e um BitBtn , e configure como a Figura 1.

Novo projeto

Figura 1. Novo projeto

Declare IniFiles na sessão Uses e iniConf : TiniFile; na sessão private e Caminho :string; em public como abaixo:


  unit UfrmPrincipal;
   interface
    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls, Buttons, IniFiles;
     type
      TFrmLeitorXMLs = class(TForm)
      Edit1: TEdit;
      Label1: TLabel;
      BtnAbrirXML: TBitBtn;
      private
       { Private declarations }
       iniconf:TIniFile;
      public
       { Public declarations }
      Caminho :string;
  end;

No evento OnCreate, coloque o seguinte código:


  procedure TFrmLeitorXMLs.FormCreate(Sender: TObject);
    begin
       iniconf := TIniFile.Create(ExtractFilePath(Application.ExeName)+'conf.ini');
  end;

Todo o conteúdo do arquivo .INI será armazenado na variável iniconf que é do tipo TIniFile, colocamos um único endereço, mas poderiam ser vários, como caminho de banco de dados, nomes, etc.

Salve o projeto na pasta como uFrmPrincipal com nome do projeto ProjetoXML.

Agora vamos criar um novo formulário para exibir o arquivo XML. Crie um novo projeto (File/New/ Form – Delphi) e salve como UfrmExibeXml.

Coloque nesse novo Form os seguintes componentes: Um TreeView, um XMLDocument, um Memo, um Label e um BitBtn e configure como mostra a Figura 2.

Novo Form

Figura 2. Novo Form

Declare a seguinte Procedure em Private:


  private
    { Private declarations }
     procedure GenereteTree(XMLNode: IXMLNode; TreeNode: TTreeNode);  // *****
      public
       { Public declarations }
      end;

Agora vamos implementar uma procedure em Private:


  private
   { Private declarations }
    procedure GenereteTree(XMLNode: IXMLNode; TreeNode: TTreeNode);  // *****
    public
     { Public declarations }
    end;

Onde estão os cinco asteriscos( *****), posicione o cursor e execute a junção de teclas Ctrl + Shift + C, com este comando será criado a procedure. Implemente o seguinte código na Procedure:


  procedure TFrmExibeXml.GenereteTree(XMLNode: IXMLNode; TreeNode: TTreeNode);
   var
    NodeText : string;
    NewTreeNode: TTreeNode;
    I : Integer;
   begin
    if XMLNode.NodeType <> ntElement then
    Exit;
    NodeText := XMLNode.NodeName;
    if XMLNode.IsTextElement then
     NodeText := NodeText + '=' + XMLNode.NodeValue;
     NewTreeNode := TreeView1.Items.AddChild(TreeNode, NodeText);
     if XMLNode.HasChildNodes then
      for I := 0 to XMLNode.ChildNodes.Count - 1 do
        GenereteTree(XMLNode.ChildNodes[I], NewTreeNode);
      end;

Esta procedure é responsável por montar a estrutura em árvore dentro do TreeView.

Volte aoFrmPrincipale de Uses em UfrmExibeXml e coloque o seguinte código no botão Abrir XML:


  procedure TFrmLeitorXMLs.BtnAbrirXMLClick(Sender: TObject);
    begin
      Caminho := iniconf.ReadString('ler_xml','path','')+ Edit1.Text +'.xml';
      try
       Application.CreateForm(TFrmExibeXml, FrmExibeXml);
       FrmExibeXml.ShowModal;
      finally
       FrmExibeXml.Release;
     end;
   end;

Quando o usuário clicar sobre o botão Abrir XML, a variável Caminho irá receber o caminho do arquivo conf.ini + o conteúdo do Edit + a extensão .xml.

Volte ao formulário ExibeXml,de Uses em FrmPrincipal, pois lá está a variável com o caminho + o nome do XML. Em seguida vá ao evento OnShow e coloque o seguinte código:


  procedure TFrmExibeXml.FormShow(Sender: TObject);
    begin
      XMLDocument1.LoadFromFile (FrmLeitorXMLs.Caminho); // pegando o conteúdo da variável Caminho.
      TreeView1.Items.Clear; //limpa o conteúdo que estiver na TreeView
      XMLDocument1.Active:= True; // ativa o XMLDocument
      GenereteTree(XMLDocument1.DocumentElement, nil); //Monta a TreeView
      with Memo1.Lines do
       begin
        Clear; //limpa o memo para receber as informações do arquivo XML
        Add('Versão : ' + XMLDocument1.Version);
        Add('Encoding : ' + XMLDocument1.Encoding);
        Add('FileName : ' + XMLDocument1.FileName);
      end;
    end;

E no botão fechar o seguinte código:


  procedure TFrmExibeXml.BitBtn1Click(Sender: TObject);
   begin
     Close;
  end;
  

Compile o projeto , digite o nome de um XML e abra. Deve ficar como mostra a Figura 3.

Compilação do projeto

Figura 3. Compilação do projeto

Nesse exemplo tudo está em memória, mas poderia estar em um banco de dados. Para isso, o que teria que fazer seria concatenar o arquivo endereço do INI com o ClientDataSet, + - assim:

Caminho := DM_1.iniconf2.ReadString('ler_xml','path','')+ DM_1.CDSNotaDespEND_DANFE.Value +'.xml';

Até a próxima

Links Úteis

  • Oracle e Delphi
    Veja neste artigo de Fabio e Fernando Prass, como utilizar o Oracle (umdos melhores BD do mundo) com Delphi.
  • DevCast: Um bate-papo sobre o Delphi:
    O Delphi está em constante evolução e com ele podemos criar aplicações desktop, servidores de aplicações, aplicativos móveis, entre outros. Neste DevCast temos um bate-papo sobre essa poderosa ferramenta de desenvolvimento.
  • Todos os Cursos de Delphi
    Confira os cursos que a DevMedia preparou para você se tornar um programador Delphi completo. Aprenda a desenvolver aplicações desktop, web e mobile utilizando o VCL, FireMonkey, FireDac e mais.

Saiba mais sobre Delphi ;)