XML Tutorial/pt

From Lazarus wiki
Revision as of 03:36, 25 April 2008 by Junior (talk | contribs) (→‎Introdução: - Update translation)
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) magyar (hu) Bahasa Indonesia (id) italiano (it) 日本語 (ja) 한국어 (ko) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN)

Introdução

A "Extensible Markup Language" é uma linguagem recomendada pela W3C criada para a troca de informações entre diferentes sistemas. É um formato baseado em texto para armazenar informações. Linguagens modernas de troca de dados, como XHTML, bem como a maioria das tecnologia de WebServices, são baseados no XML.

Atualmente há um conjunto de units que fornecem suporte para o XML no Free Pascal. Estas units são chamadas "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre (FCL) do compilador Free Pascal. A FCL já esta presente no caminho de busca (search path) padrão para o compilador no Lazarus, assim você só precisa adicionar as units na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada (Outubro/2005), assim este pequeno tutorial é uma introdução ao acesso a XML usando estas units.

O XML DOM (Modelo Objeto de Documento) é um conjunto objetos padronizados que fornece uma interface similar para uso em diferentes linguagens e sistemas. O padrão só especifica os métodos, propriedades e outras partes da interface do objeto, deixando a implementação liberada para diferentes linguagens. A FCL atualmente tem suporte completo a DOM 1.0.

Exemplo Básico

Vamos dizer que você precisa acessar um arquivo XML chamado: 'C:\Programas\teste.xml'. Aqui esta o conteúdo do arquivo:

<xml>

<?xml version="1.0"?>
<images directory="mydir">
 <imageNode URL="graphic.jpg" title="">
   <Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca>
   <Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca>
 </imageNode>
</images>

</xml>

O seguinte código pode escrever o nome dos nós num objeto TMemo no formulário:

<delphi>

var
 Documento: TXMLDocument;
 i, j: Integer;
begin
 ReadXMLFile(Documento, 'C:\Programas\teste.xml');
 Memo.Lines.Clear;
 with Documento.DocumentElement.ChildNodes do
 begin
   for i := 0 to (Count - 1) do
   begin
     Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);
     for j := 0 to (Item[i].ChildNodes.Count - 1) do
     begin
       Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '
        + Item[i].ChildNodes.Item[j].NodeValue);
     end;
   end;
 end;
 Documento.Free;
end;

</delphi>

Código inteiro para escrever em arquivo XML: (Lembrar das bibliotecas DOM e XMLWrite na cláusula uses)

<delphi>

unit Unit1; 
{$mode objfpc}{$H+}
interface
uses
 Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, DOM, XMLWrite, StdCtrls;
type
 { TForm1 }
 TForm1 = class(TForm)
   Button1: TButton;
   Label1: TLabel;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { private declarations }
 public
   { public declarations }
 end; 
var
 Form1: TForm1; 
implementation
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
 var
   xdoc: TXMLDocument;                                  //variável para o documento
   noraiz, nopai, nofilho: TDOMNode;                    //variáveis dos Nós
begin
    //cria um documento
    xdoc := TXMLDocument.create;
    //cria Nó raiz
    noraiz := xdoc.CreateElement('cadastro');
    Xdoc.Appendchild(noraiz);                           //salva Nó raiz
    //cria Nó pai
    noraiz:= xdoc.DocumentElement;
    nopai := xdoc.CreateElement('usuario');
    TDOMElement(nopai).SetAttribute('id', '001');       //cria atributo para o Nó pai
    noraiz.Appendchild(nopai);                          //salva nó pai
    //cria Nó Filho
    nopai := xdoc.CreateElement('nome');                //cria Nó Filho
    //TDOMElement(nopai).SetAttribute('sexo', 'M');   //cria atributo
    nofilho := xdoc.CreateTextNode('Fernando');         //insere valor para o nó
    nopai.Appendchild(nofilho);                         //salva nó
    noraiz.ChildNodes.Item[0].AppendChild(nopai);       //insere o nó filho ao nó pai correspondente
    //cria Nó Filho
    nopai := xdoc.CreateElement('idade');               //cria Nó Filho
    //TDOMElement(nopai).SetAttribute('ano', '1976');   //cria atributo
    nofilho := xdoc.CreateTextNode('32');               //insere coloca valor nó
    nopai.Appendchild(nofilho);                         //salva nó
    noraiz.ChildNodes.Item[0].AppendChild(nopai);       //insere o nó filho ao nó pai correspondente
    writeXMLFile(xDoc,'teste.xml');                     //escreve XML
    Xdoc.free;                                          //libera memória

end;

initialization
{$I unit1.lrs}

end.

</delphi>

Resulta em:

<xml>

   <?xml version="1.0" ?> 
 - <cadastro>
   - <usuario id="001">
       <nome>Fernando</nome> 
       <idade>32</idade> 
     </usuario>
   </cadastro>

</xml>

baseado no site:                                                       
http://develazarus.wordpress.com/2007/07/12/generando-un-archivo-xml/

--Fernandosinesio 22:28, 24 April 2008 (CEST)fernandosinesio@gmail.com