XML Tutorial/pt
│
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