https://wiki.freepascal.org/api.php?action=feedcontributions&user=Fernandosinesio&feedformat=atomFree Pascal wiki - User contributions [en]2024-03-29T06:08:22ZUser contributionsMediaWiki 1.35.6https://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=27795XML Tutorial/pt2008-04-24T20:46:46Z<p>Fernandosinesio: </p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ 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.<br />
<br />
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.<br />
<br />
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 [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Exemplo Básico===<br />
<br />
Vamos dizer que você precisa acessar um arquivo XML chamado: 'C:\Programas\teste.xml'. Aqui esta o conteúdo do arquivo:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
O seguinte código pode escrever o nome dos nós num objeto TMemo no formulário:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code><br />
<br />
Código inteiro para escrever em arquivo XML:<br />
(Lembrar das bibliotecas DOM e XMLWrite na cláusula uses)<br />
<br />
unit Unit1; <br />
{$mode objfpc}{$H+}<br />
interface<br />
<br />
uses<br />
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, DOM, XMLWrite, StdCtrls;<br />
<br />
type<br />
{ TForm1 }<br />
TForm1 = class(TForm)<br />
Button1: TButton;<br />
Label1: TLabel;<br />
Label2: TLabel;<br />
procedure Button1Click(Sender: TObject);<br />
private<br />
{ private declarations }<br />
public<br />
{ public declarations }<br />
end; <br />
var<br />
Form1: TForm1; <br />
implementation<br />
{ TForm1 }<br />
<br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
xdoc: TXMLDocument; //variável para o documento<br />
noraiz, nopai, nofilho: TDOMNode; //variáveis dos Nós<br />
<br />
begin<br />
<br />
//cria um documento<br />
xdoc := TXMLDocument.create;<br />
<br />
//cria Nó raiz<br />
noraiz := xdoc.CreateElement('cadastro');<br />
Xdoc.Appendchild(noraiz); //salva Nó raiz<br />
<br />
//cria Nó pai<br />
noraiz:= xdoc.DocumentElement;<br />
nopai := xdoc.CreateElement('usuario');<br />
TDOMElement(nopai).SetAttribute('id', '001'); //cria atributo para o Nó pai<br />
noraiz.Appendchild(nopai); //salva nó pai<br />
<br />
//cria Nó Filho<br />
nopai := xdoc.CreateElement('nome'); //cria Nó Filho<br />
//TDOMElement(nopai).SetAttribute('sexo', 'M'); //cria atributo<br />
nofilho := xdoc.CreateTextNode('Fernando'); //insere valor para o nó<br />
nopai.Appendchild(nofilho); //salva nó<br />
noraiz.ChildNodes.Item[0].AppendChild(nopai); //insere o nó filho ao nó pai correspondente<br />
<br />
//cria Nó Filho<br />
nopai := xdoc.CreateElement('idade'); //cria Nó Filho<br />
//TDOMElement(nopai).SetAttribute('ano', '1976'); //cria atributo<br />
nofilho := xdoc.CreateTextNode('32'); //insere coloca valor nó<br />
nopai.Appendchild(nofilho); //salva nó<br />
noraiz.ChildNodes.Item[0].AppendChild(nopai); //insere o nó filho ao nó pai correspondente<br />
<br />
writeXMLFile(xDoc,'teste.xml'); //escreve XML<br />
Xdoc.free; //libera memória<br />
<br />
end;<br />
<br />
initialization<br />
{$I unit1.lrs}<br />
<br />
end.<br />
<br />
Resulta em:<br />
<br />
<?xml version="1.0" ?> <br />
- <cadastro><br />
- <usuario id="001"><br />
<nome>Fernando</nome> <br />
<idade>32</idade> <br />
</usuario><br />
</cadastro><br />
<br />
baseado no site: <br />
[http://develazarus.wordpress.com/2007/07/12/generando-un-archivo-xml/]<br />
<br />
--[[User:Fernandosinesio|Fernandosinesio]] 22:28, 24 April 2008 (CEST)fernandosinesio@gmail.com</div>Fernandosinesiohttps://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=27794XML Tutorial/pt2008-04-24T20:28:50Z<p>Fernandosinesio: </p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ 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.<br />
<br />
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.<br />
<br />
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 [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Exemplo Básico===<br />
<br />
Vamos dizer que você precisa acessar um arquivo XML chamado: 'C:\Programas\teste.xml'. Aqui esta o conteúdo do arquivo:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
O seguinte código pode escrever o nome dos nós num objeto TMemo no formulário:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code><br />
<br />
Código inteiro para escrever em arquivo XML:<br />
(Lembrar das bibliotecas DOM e XMLWrite na cláusula uses)<br />
<br />
unit Unit1; <br />
{$mode objfpc}{$H+}<br />
interface<br />
<br />
uses<br />
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, DOM, XMLWrite, StdCtrls;<br />
<br />
type<br />
{ TForm1 }<br />
TForm1 = class(TForm)<br />
Button1: TButton;<br />
Label1: TLabel;<br />
Label2: TLabel;<br />
procedure Button1Click(Sender: TObject);<br />
private<br />
{ private declarations }<br />
public<br />
{ public declarations }<br />
end; <br />
var<br />
Form1: TForm1; <br />
implementation<br />
{ TForm1 }<br />
<br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
xdoc: TXMLDocument; //variável para o documento<br />
noraiz, nopai, nofilho: TDOMNode; //variáveis dos Nós<br />
<br />
begin<br />
<br />
//cria um documento<br />
xdoc := TXMLDocument.create;<br />
<br />
//cria Nó raiz<br />
noraiz := xdoc.CreateElement('cadastro');<br />
Xdoc.Appendchild(noraiz); //salva Nó raiz<br />
<br />
//cria Nó pai<br />
noraiz:= xdoc.DocumentElement;<br />
nopai := xdoc.CreateElement('usuario');<br />
TDOMElement(nopai).SetAttribute('id', '001'); //cria atributo para o Nó pai<br />
noraiz.Appendchild(nopai); //salva nó pai<br />
<br />
//cria Nó Filho<br />
nopai := xdoc.CreateElement('nome'); //cria Nó Filho<br />
//TDOMElement(nofilho).SetAttribute('sexo', 'M'); //cria atributo<br />
nofilho := xdoc.CreateTextNode('Fernando'); //insere valor para o nó<br />
nopai.Appendchild(nofilho); //salva nó<br />
noraiz.ChildNodes.Item[0].AppendChild(nopai); //insere o nó filho ao nó pai correspondente<br />
<br />
//cria Nó Filho<br />
nopai := xdoc.CreateElement('idade'); //cria Nó Filho<br />
//TDOMElement(nofilho).SetAttribute('ano', '1976'); //cria atributo<br />
nofilho := xdoc.CreateTextNode('32'); //insere coloca valor nó<br />
nopai.Appendchild(nofilho); //salva nó<br />
noraiz.ChildNodes.Item[0].AppendChild(nopai); //insere o nó filho ao nó pai correspondente<br />
<br />
writeXMLFile(xDoc,'teste.xml'); //escreve XML<br />
Xdoc.free; //libera memória<br />
<br />
end;<br />
<br />
initialization<br />
{$I unit1.lrs}<br />
<br />
end.<br />
<br />
Resulta em:<br />
<br />
<?xml version="1.0" ?> <br />
- <cadastro><br />
- <usuario id="001"><br />
<nome>Fernando</nome> <br />
<idade>32</idade> <br />
</usuario><br />
</cadastro><br />
<br />
baseado no site: <br />
[http://develazarus.wordpress.com/2007/07/12/generando-un-archivo-xml/]<br />
<br />
--[[User:Fernandosinesio|Fernandosinesio]] 22:28, 24 April 2008 (CEST)fernandosinesio@gmail.com</div>Fernandosinesio