![]() |
XML |
Índice
Introdução
Neste post trataremos sobre Serialização e Desserialização XML em Delphi.
A serialização e desserialização de objetos são práticas essenciais para desenvolver aplicações que precisem persistir dados ou realizar trocas de informações em formatos padronizados, como XML. O Delphi, sendo uma linguagem robusta, oferece ferramentas para realizar essa tarefa de forma eficaz. Neste artigo, veremos como transformar objetos Delphi em XML e vice-versa, utilizando a classe TXMLDocument
.
O que é Serialização e Desserialização?
- Serialização: Processo de conversão de um objeto em um formato que possa ser armazenado ou transmitido, como XML, JSON, ou binário.
- Desserialização: Processo inverso, ou seja, converter uma representação de dados serializados de volta para um objeto utilizável.
O formato XML é amplamente utilizado devido à sua legibilidade e suporte em várias plataformas. Em Delphi, podemos usar a classe TXMLDocument
para manipular XML, serializando e desserializando objetos complexos de forma eficiente.
Serialização de Objetos em XML
Para serializar um objeto Delphi para XML, o primeiro passo é criar uma estrutura que mapeie as propriedades do objeto para elementos XML. A classe TXMLDocument
facilita a criação de um documento XML e a adição de nós, atributos e valores correspondentes aos dados do objeto.
Exemplo de Código
Vamos criar um exemplo simples de serialização de um objeto chamado TPessoa
em XML:
type
TPessoa = class
public
Nome: string;
Idade: Integer;
Email: string;
end;
procedure SerializarPessoa(Pessoa: TPessoa; var XMLDoc: IXMLDocument);
var
RootNode, PessoaNode: IXMLNode;
begin
// Cria o documento XML
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.Active := True;
XMLDoc.Version := '1.0';
XMLDoc.Encoding := 'UTF-8';
// Cria o nó raiz
RootNode := XMLDoc.AddChild('Pessoas');
// Cria o nó para o objeto pessoa
PessoaNode := RootNode.AddChild('Pessoa');
// Adiciona os atributos do objeto como nós XML
PessoaNode.AddChild('Nome').Text := Pessoa.Nome;
PessoaNode.AddChild('Idade').Text := IntToStr(Pessoa.Idade);
PessoaNode.AddChild('Email').Text := Pessoa.Email;
// Salva o XML em um arquivo ou retorna em formato string
XMLDoc.SaveToFile('Pessoa.xml');
end;
Neste exemplo:
- Criamos uma instância de
TXMLDocument
. - Adicionamos um nó raiz chamado
Pessoas
e, dentro dele, criamos o nóPessoa
com os atributosNome
,Idade
, eEmail
derivados das propriedades do objetoTPessoa
. - O XML gerado seria salvo no arquivo "Pessoa.xml" e teria a seguinte estrutura:
<?xml version="1.0" encoding="UTF-8"?>
<Pessoas>
<Pessoa>
<Nome>João</Nome>
<Idade>30</Idade>
<Email>joao@example.com</Email>
</Pessoa>
</Pessoas>
Desserialização de XML para Objetos
Desserializar um XML significa ler o conteúdo do XML e reconstruir o objeto Delphi a partir dele. Isso é útil quando recebemos dados de uma fonte externa em formato XML e queremos utilizá-los diretamente em nossas classes.
Exemplo de Código
Para desserializar o XML gerado acima de volta em um objeto TPessoa
, o processo seria o seguinte:
procedure DesserializarPessoa(var Pessoa: TPessoa; XMLDoc: IXMLDocument);
var
PessoaNode: IXMLNode;
begin
// Acessa o nó raiz do XML
PessoaNode := XMLDoc.DocumentElement.ChildNodes['Pessoa'];
// Atribui os valores XML às propriedades do objeto
Pessoa.Nome := PessoaNode.ChildValues['Nome'];
Pessoa.Idade := StrToInt(PessoaNode.ChildValues['Idade']);
Pessoa.Email := PessoaNode.ChildValues['Email'];
end;
procedure CarregarXML;
var
Pessoa: TPessoa;
XMLDoc: IXMLDocument;
begin
// Cria a instância da pessoa
Pessoa := TPessoa.Create;
// Carrega o documento XML
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.LoadFromFile('Pessoa.xml');
// Desserializa o XML para o objeto
DesserializarPessoa(Pessoa, XMLDoc);
// Exibe as informações do objeto
ShowMessage('Nome: ' + Pessoa.Nome);
ShowMessage('Idade: ' + IntToStr(Pessoa.Idade));
ShowMessage('Email: ' + Pessoa.Email);
Pessoa.Free;
end;
Nesse exemplo:
- O método
DesserializarPessoa
lê o XML e atribui os valores dos nós correspondentes às propriedades do objetoTPessoa
. - A função
CarregarXML
é responsável por carregar o arquivo XML e chamar a desserialização.
Veja abaixo a ilustração do projeto:
![]() |
Ilustração do projeto. |
Código fonte do exemplo
Você pode fazer o download do exemplo do projeto através do repositório do github:
https://github.com/Gisele-de-Melo/Serializacao_Desserializacao_XML
Usando TXMLDocument
para Serializar/Desserializar Dados Complexos
A classe TXMLDocument
em Delphi é uma ferramenta poderosa para trabalhar com XML. Ela fornece uma interface para manipulação de nós, permitindo tanto a serialização quanto a desserialização de dados de forma simples.
Serialização de Estruturas Complexas
Se o objeto a ser serializado contém outras classes ou listas de objetos, a abordagem será semelhante, mas será necessário percorrer as listas e adicionar nós adicionais ao XML.
Exemplo de uma classe com lista de endereços:
type
TEndereco = class
Rua: string;
Numero: Integer;
end;
TPessoa = class
Nome: string;
Enderecos: TList<TEndereco>;
end;
Na serialização, você iteraria sobre a lista Enderecos
e adicionaria nós correspondentes:
for Endereco in Pessoa.Enderecos do
begin
EnderecoNode := PessoaNode.AddChild('Endereco');
EnderecoNode.AddChild('Rua').Text := Endereco.Rua;
EnderecoNode.AddChild('Numero').Text := IntToStr(Endereco.Numero);
end;
A desserialização seguiria a mesma lógica, lendo os nós correspondentes e populando a lista de endereços do objeto.
Acredito que com essa dica você pode fazer seu próprio projeto, serializando e desserializando XML utilizando classes como estrutura. Coloque a mão na massa, quanto mais você codifica, mais o seu cérebro assimila tudo que você leu.
Conclusão
A serialização e desserialização de objetos em XML no Delphi são práticas essenciais para manipular dados de forma estruturada e interoperável. Utilizando a classe TXMLDocument
, é possível criar documentos XML a partir de objetos Delphi e, em seguida, reconstruí-los a partir do XML. A aplicação dessa técnica facilita a persistência e o intercâmbio de dados entre sistemas, promovendo maior flexibilidade e integração com outros serviços.
O Delphi oferece grande flexibilidade com o TXMLDocument
, permitindo trabalhar com dados complexos e garantindo que as trocas de informações sejam realizadas de forma eficiente e organizada.
Nenhum comentário:
Postar um comentário