Interface Objet-Document XML
XMLObject est le nom de l'unité Pascal Objet implémentant la classe TXMLObject. Cette classe offre un moyen simple de construire et de manipuler des documents XML en permettant une "sérialisation" des valeurs des propriétés publiées des objets au format XML.
En effet, TXMLObject se base sur l'information de type à l'exécution (RTTI) d'un objet -dont la classe étend TXMLObject- pour générer un flot de données XML représentant cet objet avec les valeurs de ses propriétés publiées.
TXMLObject reconnaît également les références vers d'autres instances de TXMLObject et prend aussi en charge des références de TCollection dont les éléments sont des instances de TXMLObject.
La création et la relecture de documents XML est ainsi grandement facilité puisqu'il n'est pas nécessaire d'écrire le code qui fait le lien entre les données de vos classes et un document XML, non plus celui qui lirait un document XML pour initialiser un ensemble d'objets.
TXMLObject peut être vu comme une interface objet/document XML.


Examinons un exemple simple tiré de l'unité Unit1 du projet test Delphi Project1.dpr (voir "Ressource" ci-dessous).

La première étape consiste à déclarer une classe étendant la classe TXMLObject :

TXMLObject1 = class(TXMLObject)
  private
    FPropString1, FPropString2: string;
    FPropInteger: Integer;
    FPropFloat: Double;
  published
    property PropString1: string read FPropString1 write FPropString1;
    property PropString2: string read FPropString2 write FPropString2;
    property PropInteger: Integer read FPropInteger write FPropInteger;
    property PropFloat: Double read FPropFloat write FPropFloat;
  end;

L'appel de la méthode TXMLObject.SaveToFile() sur l'objet XMLObject1, créé de la manière suivante :

XMLObject1 := TXMLObject1.Create(nil);
  with XMLObject1 do
  begin
    PropString1 := 'Hello';
    PropString2 := 'World !';
    PropInteger := 123;
    PropFloat := 1.23;
    SaveToFile('XMLObject1.xml');
  end;
end;

produit le fichier texte suivant :

<XMLOBJECT ClassName="TXMLObject1">
  <PropString1>Hello</PropString1>
  <PropString2>World !</PropString2>
  <PropInteger>123</PropInteger>
  <PropFloat>1,23</PropFloat>
</XMLOBJECT>


L'attribut ClassName est nécessaire puisqu'il permettra de recréer une instance du type indiqué dans ClassName à l'aide de l'une des deux fonctions de la partie interface de l'unité XMLObject :

function CreateXMLObjFromFile(const FileName: string): TXMLObject;
function CreateXMLObjFromString(const Text: string): TXMLObject;

Pour que cela fonctionne dans le cas de notre exemple, il faut avoir une instruction enregistrant la classe TXMLObject1, par exemple dans la partie d'initialisation de l'unité, RegisterClasses([TXMLObject1]).

On pourra donc recréer une instance de TXMLObject1 par :

XMLObject1 := CreateXMLObjFromFile('XMLObject1.xml') as TXMLObject1;

XMLObject1 étant bien sûr une référence de type TXMLObject1.


L'unité Unit1 déclare aussi les classes TXMLObject2 et TXMLObject3 destinées à démontrer comment les propriétés référençants d'autres instances de TXMLObject ou des objets de type TCollection (dont les éléments sont des TXMLObjects), sont utilisées.


Ressource

Téléchargez XMLObject 0.9 (Delphi 5)

Sommaire

Ressource

Début

Copyright © 2003 OBJECT-EVERYWHERE. Tous droits réservés | Bertrand Goetzmann