Social Icons

domingo, 15 de julho de 2012

Manipulação de XML com TXMLDocument – Parte 2

Dando continuidade ao artigo sobre manipulação de XML onde estou mostrando como manipular arquivos XML utilizando o componente TXMLDocument, explicarei hoje como criar o seu próprio arquivo XML, pois no artigo anterior somente fizemos a manipulação de um arquivo XML já pronto.
Mostrarei como criar um XML a seguinte estrutura:
<atualizacao>
  <executaveis>
    <executavel versao='1.0.3.22' descricao='Modulo gerencial'>gerencial.exe</executavel>
    <executavel versao='1.0.3.123' descricao='Configuracoes da Aplicacao'>configuracoes.exe</executavel>
  </executaveis>
  <bibliotecas>
    <biblioteca versao='2.0.0.1' descricao='Biblioteca de funcoes'>funcoes.dll</biblioteca>
    <biblioteca versao='1.2.0.4' descricao='Biblioteca com rotinas de negocio da aplicacao'>app.dll</biblioteca>
  </bibliotecas>
</atualizacao>

Então vamos lá! Crie no delphi um novo projeto e arraste um TMemo, um TButton e um TXMLDocument para o Form.

tela3

No evento onClick do TButton que foi adicionado a tela, escreva o seguinte código:
procedure TForm1.Button1Click(Sender: TObject);
var
  atualizacao :IXMLNode;
  executaveis :IXMLNode;
  executavel :IXMLNode;
  bibliotecas :IXMLNode;
  biblioteca :IXMLNode;
begin
  //Ativa o componente TXMLDocument
  XMLDocument1.Active := true;

  //Cria o nó principal do xml
  atualizacao := XMLDocument1.AddChild('atualizacao');

  //Cria o nó dos executaveis dentro do nó principal
  executaveis := atualizacao.AddChild('executaveis');

  //Adiciona um executavel ao nó de executaveis
  executavel := executaveis.AddChild('executavel');
  executavel.SetAttributeNS('versao','','1.0.3.22');
  executavel.SetAttributeNS('descricao','','Modulo gerencial');
  executavel.Text := 'gerencial.exe'; 

  //Adiciona um executavel ao nó de executaveis
  executavel := executaveis.AddChild('executavel');
  executavel.SetAttributeNS('versao','','1.0.3.123');
  executavel.SetAttributeNS('descricao','','Configuracoes da Aplicacao');
  executavel.Text := 'configuracoes.exe';

  //Cria o nó de bibliotecas dentro do nó principal
  bibliotecas := atualizacao.AddChild('bibliotecas');

  //Adiciona uma biblioteca ao nó de biblioteca
  biblioteca := bibliotecas.AddChild('biblioteca');
  biblioteca.SetAttributeNS('versao','','2.0.0.1');
  biblioteca.SetAttributeNS('descricao','','Biblioteca de funcoes');
  biblioteca.Text := 'funcoes.dll';

  //Adiciona uma biblioteca ao nó de biblioteca
  biblioteca := bibliotecas.AddChild('biblioteca');
  biblioteca.SetAttributeNS('versao','','1.2.0.4');
  biblioteca.SetAttributeNS('descricao','','Biblioteca com rotinas de negocio da aplicacao');
  biblioteca.Text := 'app.dll'; 

  //Mostra o arquivo xml gerado
  Memo1.Lines.Text := XMLDocument1.XML.Text;
end;

Se tudo ocorrer bem ao clicar no TButton do formulário será apresentado o texto do XML gerado pelo exemplo.

É isso aí pessoal, espero ter ajudado e aguardo suas dúvidas, comentários e sugestões.
Baixe os fontes do artigo no GitHub

5 comentários:

  1. amigo fiz igual ao seu código e apresentou diferença da estrutura, uma que não foi informado no código os nomes "gerencial.exe", "configuracoes.exe", "funcoes.dll" e mesmo sem informar no final não está sendo fechado
    Exemplo :
    gerencial.exe não incluindo



    Por que isso acontece?

    ResponderExcluir
    Respostas
    1. Amigo, obrigado por seu comentário, realmente estava faltando eu colocar no código as partes que informavam o nomes dos módulos, mas sem aquela parte a sua estrutura deveria ficar assim
      ....


      ...

      ...

      a barra ao final do nó executavel fecha o nó sem precisar criar um , para mais detalhes eu sugiro o seguinte site para você. http://www.w3schools.com/. lá tem bastante informações sobre como os XMLs devem ser construídos e quais são as regras.

      Excluir
    2. O exemplo de xml do comentário acima, não apareceu da primeira vez que escrivi.
      <executaveis>
      <executavel versao='0.0.0.0' descricao='exemplo de xml'/>

      </executaveis>

      Excluir
  2. Bom dia, Jocimar. Existe alguma forma de nos comunicarmos sem ser por aqui pelo blog, skype por exemplo? Se sim me add por favor: natanael2com . Grato

    ResponderExcluir
  3. Show de bola man!
    Acabei de precisar disto!
    Obrigado!

    ResponderExcluir

Diga-nos, o que achou deste artigo?