Récupération de données dans un fichier XML.
Résolu
sigouil
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
sigouil Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
sigouil Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour, après une journée complète à chercher sur net, il faut que je me rende à la conclusion : j'ai rien compris !
Je vous explique mon problème.
J'ai un fichier xml contenant des infos que je doit injecter dans une base Mysql. Le fichier se présente de la sorte :
Le début de mon code PHP est standard :
ensuite il y a une boucle 'foreach'.
Après cela, je me suis embrouillé est je suis partis dans toutes les directions (sauf la bonne )
Pourriez-vous me donner la marche à suivre pour la boucle de lecture des differentes entrées du XML. La partie Mysql doit etre à ma porté.
Merci.
Je vous explique mon problème.
J'ai un fichier xml contenant des infos que je doit injecter dans une base Mysql. Le fichier se présente de la sorte :
<?xml version="1.0" encoding="windows-1252"?> <CLIENTS> <CLIENT> <CODE_CLIENT>001</CODE_CLIENT> <TYPE_OFFRE>2</TYPE_OFFRE> <CODE_SOCIETE>0001</CODE_SOCIETE> <CODE_SITE>02</CODE_SITE> <NO_DOSSIER>00001</NO_DOSSIER> </CLIENT> <CLIENT> <CODE_CLIENT>002</CODE_CLIENT> <TYPE_OFFRE>2</TYPE_OFFRE> <CODE_SOCIETE>0001</CODE_SOCIETE> <CODE_SITE>02</CODE_SITE> <NO_DOSSIER>00002</NO_DOSSIER> </CLIENT> ... </CLIENTS>
Le début de mon code PHP est standard :
<?php //Charger le fichier XML $fichier = "CLIENTS.XML"; $dom = new DOMDocument(); if (!$dom->load($fichier)) { die("Impossible de charger le fichier XML"); }
ensuite il y a une boucle 'foreach'.
Après cela, je me suis embrouillé est je suis partis dans toutes les directions (sauf la bonne )
Pourriez-vous me donner la marche à suivre pour la boucle de lecture des differentes entrées du XML. La partie Mysql doit etre à ma porté.
Merci.
A voir également:
- Récupération de données dans un fichier XML.
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
6 réponses
Commence déjà par mettre des balises en minuscules, ainsi que le nom de ton fichier. Et utilises plutôt utf-8 comme encodage.
Pour ta boucle :
Pour ta boucle :
$clients = document->getElementsByTagName('clients')->item(0); <CODE_CLIENT>002</CODE_CLIENT> <TYPE_OFFRE>2</TYPE_OFFRE> <CODE_SOCIETE>0001</CODE_SOCIETE> <CODE_SITE>02</CODE_SITE> <NO_DOSSIER>00002</NO_DOSSIER> foreach($clients->getElementsByTagName('client') as $client) { $code_client = $client->getElementsByTagName('code_client')->firstChild->nodeValue; $type_offre = $client->getElementsByTagName('type_offre')->firstChild->nodeValue; $code_societe = $client->getElementsByTagName('code_societe')->firstChild->nodeValue; $code_site = $client->getElementsByTagName('code_site')->firstChild->nodeValue; $no_dossier = $client->getElementsByTagName('no_dossier')->firstChild->nodeValue; // ta requête SQL }
Après les getElementsByTagName, il faut ajouter "->item(0)".
$code_client = $client->getElementsByTagName('CODE_CLIENT')->item(0)->nodeValue;Si ça ne fonctionne toujours pas :
$code_client = $client->getElementsByTagName('CODE_CLIENT')->item(0)->firstChild->nodeValue;
MERCI !
C'est bon, ca marche.
J'ai rarement perdu autant de temps à trouver une solution.
Un grand merci à toi avion-f16
C'est bon, ca marche.
J'ai rarement perdu autant de temps à trouver une solution.
Un grand merci à toi avion-f16
Merci de ta réponse avion-f16, mais ça me renvoi un message d'erreur :
La ligne 27 :
$code_client = $client->getElementsByTagName('code_client')->firstChild->nodeValue;
(j'ai commenté les autres lignes du foreach pour limiter les messages d'erreur)
en retirant ->firstChild->nodeValue je n'ai pas ces message, mais '$client' est vide.
Pour le fichier XML, je n'ai aucun pouvoir dessus. il se trouve sur un site externe.
Notice: Undefined property: DOMNodeList::$firstChild in C:\wamp\www\Projet\index.php on line 27 Notice: Trying to get property of non-object in C:\wamp\www\Projet\index.php on line 27
La ligne 27 :
$code_client = $client->getElementsByTagName('code_client')->firstChild->nodeValue;
(j'ai commenté les autres lignes du foreach pour limiter les messages d'erreur)
en retirant ->firstChild->nodeValue je n'ai pas ces message, mais '$client' est vide.
Pour le fichier XML, je n'ai aucun pouvoir dessus. il se trouve sur un site externe.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Retire seulement "->firstChild", mais laissse "->nodeValue".
Avec DOM en JS on est obligé de mettre firstChild pour récupérer la valeur du noeud, mais pas en PHP ...
Retire aussi ce gros bloc :
Avec DOM en JS on est obligé de mettre firstChild pour récupérer la valeur du noeud, mais pas en PHP ...
Retire aussi ce gros bloc :
<CODE_CLIENT>002</CODE_CLIENT> <TYPE_OFFRE>2</TYPE_OFFRE> <CODE_SOCIETE>0001</CODE_SOCIETE> <CODE_SITE>02</CODE_SITE> <NO_DOSSIER>00002</NO_DOSSIER>C'était pour ne pas avoir à monter/descendre quand je codais le script ;)
J'avais déjà testé comme ca, mais cela ne change presque rien, si ce n'est que je n'ai qu'une erreur par itération.
Erreur :
Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\Projet\index.php on line 26
avec en ligne 26 :
$code_client = $client->getElementsByTagName('CODE_CLIENT')->nodeValue;
Je pense que je vais me tourner vers simpleXML. :-(
Erreur :
Notice: Undefined property: DOMNodeList::$nodeValue in C:\wamp\www\Projet\index.php on line 26
avec en ligne 26 :
$code_client = $client->getElementsByTagName('CODE_CLIENT')->nodeValue;
Je pense que je vais me tourner vers simpleXML. :-(