Page 1 sur 1

Object <-> XML

Posté : 03 févr. 2009, 20:41
par dhjapan
Bonjour,
je suis à la recherche d'un class qui me permettrai de convertir un object en XML et inversement.

J'ai bien trouvé des functions capable de créer un XML à partir d'un object simple, par exemple :

Code : Tout sélectionner

obj Object ( [name] => jean dupont [tel] => 0123 [email] => [email protected] )
mais l'object que je voudrais convertir est bien plus complexe , puisqu'il contient aussi bien des string que des array à differents niveau de profondeur.

Merci d'avance pour votre aide.

Posté : 04 févr. 2009, 00:16
par naholyr

Posté : 04 févr. 2009, 01:22
par dhjapan
Merci naholyr, effectivement j'aurai pû trouver tout seul, mais je cherchai "php xml to object" et pas "php serialize xml".

Merci pour le coup de main.

J'ai donc recupéré la class mais la class ReflectionClassme renvois cette erreure :
"Uncaught exception 'ReflectionException' with message 'Class does not exist'..."

Un second coup de main serait le bienvenu parce que là j'avoue travailler avec des trucs que je comprends très mal :)

Merci

Posté : 11 févr. 2009, 13:09
par Hywan
Hey :),

Tu as deux problèmes : soit tu veux convertir un objet en XML, ce qui revient à une sérialisation, soit tu veux convertir une classe en XML. Peut-être qu'il faut réviser ces notions de Programmation Orientée Objet afin de mieux comprendre la différence entre classe et objet ?

Si tu veux transformer un objet en XML (ce que je pense que tu veux faire), tu as deux solutions possibles.
La première solution est triviale : tu crées une interface SeriazableInXml qui force l'implémentation d'une méthode que tu appelleras. Le travail sera manuel.
La seconde solution est moins triviale, elle se base sur l'introspection (ou la réflexion, traduction maladroite de reflection en anglais). L'introspection c'est quoi ? PHP est transformé en opcode (grosso modo une sorte de langage machine plus balèze). Le mécanisme de l'introspection est donc d'interroger l'opcode produit afin plus d'informations supplémentaires. Dans ton cas, ça te permettrait de lister tous les attributs d'une classe par exemple. Un avantage immédiat est que le travail sera automatisé pour toute classe (et tout objet).

Je te conseille de lire la documentation sur l'introspection de PHP qui n'est pas très détaillée sur le fonctionnement, mais l'est sur l'API et les exemples (ce qui est suffisant pour toi).

Au passage, ton erreur te dit que la classe n'existe pas. Il suffit de la charger (à travers un include par exemple ?) …

Si tu as fait un objet ressemblant à StdClass, on peut vouloir faire des choses plus fines. À toi de me dire si c'est le cas ou pas.

Et si tu veux passer d'un fichier XML vers un objet, c'est très différent cette fois. On verra ça plus tard dans le sujet car c'est nettement plus compliqué. On va y aller étape par étape :).