créer des liaisons entre des fichiers xml et sql par PHP

Eléphanteau du PHP | 15 Messages

27 oct. 2011, 09:52

bonjour, je vous écris pour une question.

Je pense que cela est possible mais je souhaitais savoir si vous auriez des pistes (expérience à ce sujet, tuto, pages web...) voila je souhaitai savoir s'il était possible de créer des relations entre une table xml et une BDD MySQL comme le montre la capture ci-jointe
relations.png
Par exemple la ou est écrit Adresse, code Postal, ville, Pays serait la base SQL et les données du menu déroulant serait la table importée en xml.
En effet , je pointe à la main une multitude de données et mettre en place une routine comme celle-ci me ferait gagner un temps très précieux.

En premier lieu je voudrais savoir comment s'appelle cette pseudo jointure ou relations entre tables. car j''essaie de chercher sur internet mais en vain
de deux je voulais savoir si xml et sql formaient un bon couple ou s'il fallait transformer le xml en un autre format.

Merci d'avance
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 oct. 2011, 10:49

salut,


c'est pas bien clair ton affaire.

tu voudrais dire que tu aurais un xml de ce type :

Code : Tout sélectionner

<root> <item> <adresse></adresse> <cp></cp> <ville></ville> <pays></pays> <nom></nom> <description></description> </item> <item> ...... </item> .... </root>
???

Après je ne comprend pas le coup du formulaire ! tu veux "auto alimenter des tables SQL depuis un fichier xml c'est ça ?

dans ce cas il te "suffit" de parcourir le fichier XML (avec simplexml ou dom) et d'insérer dans la table (ou les tables) pour chaque "item";

après la je vois des dépendances fonctionnel sur pays et villes, qui dans un modèle normal de base, devraient avoir leur propre table.

et la soit tu récupère les deux listes avant la lecture du fichier xml, soit tu fait faire le boulot au sgbd avec un trigger bien sentis pour récupérer l'id du pays ou insérer un nouveau pays idem pour la ville).
dasn ce style la
Image

bon après voila faut voir ce que tu en fait :)

sinon tu peux stocker ton xml complet dans un champ aussi :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 15 Messages

27 oct. 2011, 11:26

bonjour moogli désolé de ne pas avoir été assez clair, je le pensais.

en fait voila j'ai un fichier en .xml avec par exemple

<address></address>
<country></country>


et je voulais mettre en place cette routine afin que je puisse attribuer à address =>adresse et à country=>pays
L'avantage est qu'avec le menu déroulant j'ai toutes les entêtes de champs de ma table .xml. ainsi je peux leur attribuer leur correspondance afin de pouvoir réaliser ma "jointure" et alimenter ma base sql.

je souhaite m'inspirer de cette méthode http://www.batchgeocodeur.mapjmz.com/

Merci encore pour les explications

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 oct. 2011, 11:54

tu veux pouvoir rendre la chose "transparente" de façon a ce que si le fichier xml change tu puisse réaliser les insertion quand même ?

Cela doit pouvoir se faire avec la dtd nan ? :mrgreen:
http://liafa.jussieu.fr/~carton/Enseign ... index.html


sinon je vois pas trop, mise à part la version barbare, tu créer une objet simplexml, tu boucle sur cette objet, et pour chaque enfant tu regarde s'il y a un autre enfant et ainsi de suite.
tu stock le tout dans un tableau pour l'affiche dans ta liste.
j'ai pas trouvé de méthode dans simplexml ou dom qui te fournisse directement le nom des éléments dans l'arbre.


si la DtD est fournie je pense que c'est le plus de la "parser" que de boucler comme un g***d sur le fichier lui même :/

edit : surtout que ton exemple est basé sur du CSV (délimiteur \t) et non du xml. Il prend pour principe que la première ligne est toujours une description de champs. essai son script sans la 1ère ligne pour voir (juste avec l'exemple).
Donc dans le principe tu peux figer le format du document XML (via une dtd ou pas c'pas grave) et rejeter un document qui ne correspondrais pas à cela !

@+
Il en faut peu pour être heureux ......