XML Tutorial/pt

From Free Pascal wiki
Revision as of 03:27, 25 April 2008 by Junior (talk | contribs) (→‎Exemplo Básico: Adicionada formatação... ToDo: Traduzir algumas partes para o inglês (en))
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 para a troca de informações entre diferentes sistemas. É um formato baseado em texto de guardar informações. Linguagens modernas de troca de dados, como o XHTML, além da maioria das tecnologia de WebServices, são baseados no XML.

Atualmente há um conjunto de unidades que dão suporte para o XML no Lazarus. Estas unidades são "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre(FCL) do compilador Free Pascal. A FCL esta sempre presente no caminho padrão para o compilador no Lazarus, então você somente precisa adicionar as unidades na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada(desde outubro de 2005), então este curto tutorial é uma introdução ao acesso a XML usando estas unidades.

O XML DOM (Documento de Modelo do Objeto) é um conjunto padronizações de objetos que fornece uma interface para uso em diferentes linguagens e sistemas. O padrão somente especifica os métodos, propriedades e outras partes da interface do objeto, deixando a implementação livre para diferentes linguagens. A FCL atualmente suporta completamente 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