Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1914 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Importer un fichier xml vers une BDD Mysql ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Importer un fichier xml vers une BDD Mysql ?

n°1198426
weed
Posté le 13-09-2005 à 13:20:23  profilanswer
 

voila, j'ai un logiciel professionnel qui va me déposer un fichier xml sur le serveur ftp de l'hebergeur.  
 
 
 
J'aimerais parser le fichier pour importer toutes les données dans ma base de données MySQL. L'utilisateur se rendra sur une page d'admin du site et cliquera sur un bouton "Import" pour importer les données du fichier xml.
 
 
 
J'ai vu qu'il existait des commandes toutes faites : DOM XML
 
Mais je ne comprends pas du tout, il y a des fonctions propres au navigateur ?  
http://www.w3schools.com/dom/dom_parser.asp ==> voici des fonction qui ne fonctionnent avec IE.
http://www.w3schools.com/dom/tryit [...] arsertest2 ==> voici un exemple qui ne fonctionne qu'avec IE
 
Auriez vous un exemple, qui chargerait un fichier php, qui chargerait un fichier xml et qui le paserer ?

mood
Publicité
Posté le 13-09-2005 à 13:20:23  profilanswer
 

n°1198443
weed
Posté le 13-09-2005 à 13:48:23  profilanswer
 

bon en fait j'ai trouver des commandes interessantes : domxml_open_file qui me permettrait justement de charger un fichier xml sans se soucier du navigateur.
 
J'ai repris l'exemple de php.net :
http://fr.php.net/manual/fr/functi [...] n-file.php
 

<?php
 
if(!$dom = domxml_open_file("exemple.xml" )) {
  echo "Erreur lors de l'analyse du document\n";
  exit;
}
 
$root = $dom->document_element();
?>

 
 
mais cela ne semble pas fonctionner :

Citation :


Warning: domxml_open_file(): I/O in c:\program files\easyphp1-8\www\xmltext.php on line 3
 
Warning: domxml_open_file(): warning : in c:\program files\easyphp1-8\www\xmltext.php on line 3
 
Warning: domxml_open_file(): failed to load external entity "exemple.xml" in c:\program files\easyphp1-8\www\xmltext.php on line 3
Erreur lors de l'analyse du document


 
 
J'ai activer le domxml sous easyphp. Maintenant j'ai le meme phpinfo que mon herbergeur : http://www.online.net/support/fr/doc/php4/phpinfo.html
 
Le fichier xml est bien entendu dans le meme repertoire que mon script php.
 
fichier xml :
 

<?xml version="1.0" encoding="windows-1252"?>
<BIENS>
<BIEN>
 <CODE_CLIENT>XXX</CODE_CLIENT>
 <TYPE_OFFRE>2</TYPE_OFFRE>
        ...........
</BIEN>
........
</BIENS>


Pourquoi cette erreur ?
Que cela signifie t'il ?
 
 

n°1198444
omega2
Posté le 13-09-2005 à 13:49:13  profilanswer
 

En PHP4 et inférieur, utiliser les fonctions DOM de php. (voir la doc php)
On s'en fiche alors de l'implémentation DOM des navigateurs.
 
En PHP5 et supérieur t'as simpleXML qui s'utilise trés facilement et qui te permettra de traiter le fichier beaucoup plus facilement. :)

n°1198492
DEns91
Posté le 13-09-2005 à 14:17:06  profilanswer
 

Pour parser un fichier XML en PHP il y a 2 Methodes, la DOM et la SAX. je sais pas qu'elle est la meilleur. Perso j'ai toujours utilisé la methode SAX que je trouve plus simple a comprendre.
 
Je te propose un exemple de code pour parser ton XML mais en methode SAX, il est a amélioré et a indenté j'ai tapé ca rapidement. j'espère que je n'ai pas ecrit trop de conneries
 
Tu nous dis que ton XML est du style ::
 
<?xml version="1.0" encoding="windows-1252"?>
<BIENS>
<BIEN>
 <CODE_CLIENT>XXX</CODE_CLIENT>
 <TYPE_OFFRE>2</TYPE_OFFRE>
</BIEN>
<BIEN>
 <CODE_CLIENT>ZZZ</CODE_CLIENT>
 <TYPE_OFFRE>5</TYPE_OFFRE>
</BIEN>
</BIENS>
 
<?php
function startElement($parser, $name, $attrs) {
 global $buffer;  
 global $cpt_bien;  
  global $tab_resultats;        
 
 switch($name) {
   case "BIENS" : $cpt_bien = 0; break;
   case "CODE_CLIENT" :  
     case "TYPE_OFFRE" : $buffer = ''; break;
 }        
}
 
 
 
// XML - End Element
function endElement($parser, $name) {    
 global $buffer;
   global $cpt_bien;
 global $tab_resultats;
 
 switch($name) {
   case "CODE_CLIENT" : $tab_resultats[$cpt_bien]["client"] = $buffer; break;
      case "TYPE_OFFRE" : $tab_resultats[$cpt_bien]["type"] = $buffer; break;          
   }
   
 if( $name == "BIEN" ) {
   $cpt_bien++;      
    $buffer = '';          
   }                
}  
 
 
 
// XML - Character Data
function characterData($parser, $value) {
  global $buffer;  
  $buffer .= $value;      
}  
 
 
 
$fichierXML = "parseur.xml";
 
 
if(!($fp = fopen($fichierXML, "r" )))
{
  die("Fichier ".$fichierXML." non disponible" );
}
 $reponse_xml = fread($fp,filesize($fichierXML));
 
  $xml_parser = xml_parser_create();
  xml_set_element_handler($xml_parser, "startElement", "endElement" );
  xml_set_character_data_handler($xml_parser, "characterData" );
 
  if(!xml_parse($xml_parser, $reponse_xml)) {
   echo "erreur parse";
    die(xml_error_string(xml_get_error_code($xml_parser)));  
  }    
 
  xml_parser_free($xml_parser);
 
  $tab_resultats["nbr"] = $cpt_bien;  
  echo "<pre>";
  print_r($tab_resultats);
  echo "</pre>";
?>

Message cité 1 fois
Message édité par DEns91 le 13-09-2005 à 14:23:20
n°1198596
weed
Posté le 13-09-2005 à 15:32:18  profilanswer
 

oula, je m'attendais pas à un tel poste, mille merci Dens91
 
je viens de le tester et ca fonctionne à merveille

n°1198613
FlorentG
Unité de Masse
Posté le 13-09-2005 à 15:40:29  profilanswer
 

weed a écrit :


J'ai repris l'exemple de php.net :
http://fr.php.net/manual/fr/functi [...] n-file.php
[...]
 
mais cela ne semble pas fonctionner :
[...]
 
Pourquoi cette erreur ?
Que cela signifie t'il ?


 
Quand tu lis un truc dans la doc PHP, n'oublie jamais de lire les commentaires en dessous. Faut savoir que la doc PHP, surtout pour DOMXML est nulle à chier. Si tu aurais lu, tu aurais pu voir ça :

Citation :

Using PHP 4.2.3 and Win2K.
 
The XML file needs to be referenced using the full filesystem path name, even if its in the same directory.


 

Citation :

If you want to work on both Windows and Linux, I found appending the following to the front of your file path works:
 
$xmlPath = dirname(__FILE__) . "/";
$xmlDOM = domxml_open_file($xmlPath . "file.xml" );
 
(rather than the "\\" in a previous post on this page which only works on Windows).
 
This should get around the I/O errors.


---------------
last.fmflickr
n°1198665
DEns91
Posté le 13-09-2005 à 16:02:46  profilanswer
 

weed a écrit :

oula, je m'attendais pas à un tel poste, mille merci Dens91
 
je viens de le tester et ca fonctionne à merveille


 
Mais de rien, je m'ennui un peu a mon taf  :sleep: , mon chef de projet [:alfinfrance] estime très mal le temps qu'il me faut pour developper. Donc je m'occupe comme je peux!!


Message édité par DEns91 le 13-09-2005 à 16:03:11
n°1471185
elmaj
Posté le 06-11-2006 à 16:01:41  profilanswer
 

Bonjour, je suis un peu dans le meme cas que vous, je suis webmaster et je bosse avec des agences immobilieres, je souhaite importer des données provennat de logiciels de transaction comme pericles ou transtel (fnaim)
je cherche des infos dans ce sens
avez vous  
un moment pour en discuter
 
cordialement : le responsable d'index-immo.com
 
 

weed a écrit :

voila, j'ai un logiciel professionnel qui va me déposer un fichier xml sur le serveur ftp de l'hebergeur.  
 
 
 
J'aimerais parser le fichier pour importer toutes les données dans ma base de données MySQL. L'utilisateur se rendra sur une page d'admin du site et cliquera sur un bouton "Import" pour importer les données du fichier xml.
 
 
 
J'ai vu qu'il existait des commandes toutes faites : DOM XML
 
Mais je ne comprends pas du tout, il y a des fonctions propres au navigateur ?  
http://www.w3schools.com/dom/dom_parser.asp ==> voici des fonction qui ne fonctionnent avec IE.
http://www.w3schools.com/dom/tryit [...] arsertest2 ==> voici un exemple qui ne fonctionne qu'avec IE
 
Auriez vous un exemple, qui chargerait un fichier php, qui chargerait un fichier xml et qui le paserer ?


n°1889381
RenoCr
Posté le 29-05-2009 à 12:05:00  profilanswer
 

C'est effectivement la solution la plus simple que j'ai croisé pour l'instant.
cela fonctionne-t-il pour le fichier xml comportant un arborescence plus profonde.  
je suis confronté a un cas très similaire au xml proposé ds ce sujet mais avec par exemple un noeud Image en plus.
J'ai modifié l'exemple pour être plus clair
<?xml version="1.0" encoding="windows-1252"?>
<BIENS>
<BIEN>
 <CODE_CLIENT>XXX</CODE_CLIENT>
 <TYPE_OFFRE>2</TYPE_OFFRE>
</BIEN>
<BIEN>
 <CODE_CLIENT>ZZZ</CODE_CLIENT>
 <TYPE_OFFRE>5</TYPE_OFFRE>
 <IMAGES>
     <IMAGE id="0">/dir/image.jpg</IMAGE>
     <IMAGE id="1">/dir/picture.jpg</IMAGE>
...
  <IMAGE id="n">blabla.png</IMAGE>
</IMAGES>
</BIEN>
</BIENS>  
 
je ne vois pas comment implémenté une 'sous famille' comme cela ds le jolie code que tu as fais.
 
Merci ^^
 

n°1906080
Djithel
Posté le 17-07-2009 à 10:33:34  profilanswer
 

DEns91 a écrit :

Pour parser un fichier XML en PHP il y a 2 Methodes, la DOM et la SAX. je sais pas qu'elle est la meilleur. Perso j'ai toujours utilisé la methode SAX que je trouve plus simple a comprendre.
 
Je te propose un exemple de code pour parser ton XML mais en methode SAX, il est a amélioré et a indenté j'ai tapé ca rapidement. j'espère que je n'ai pas ecrit trop de conneries

Spoiler :


Tu nous dis que ton XML est du style ::
 
<?xml version="1.0" encoding="windows-1252"?>
<BIENS>
<BIEN>
 <CODE_CLIENT>XXX</CODE_CLIENT>
 <TYPE_OFFRE>2</TYPE_OFFRE>
</BIEN>
<BIEN>
 <CODE_CLIENT>ZZZ</CODE_CLIENT>
 <TYPE_OFFRE>5</TYPE_OFFRE>
</BIEN>
</BIENS>
 
<?php
function startElement($parser, $name, $attrs) {
 global $buffer;  
 global $cpt_bien;  
  global $tab_resultats;        
 
 switch($name) {
   case "BIENS" : $cpt_bien = 0; break;
   case "CODE_CLIENT" :  
     case "TYPE_OFFRE" : $buffer = ''; break;
 }        
}
 
 
 
// XML - End Element
function endElement($parser, $name) {    
 global $buffer;
   global $cpt_bien;
 global $tab_resultats;
 
 switch($name) {
   case "CODE_CLIENT" : $tab_resultats[$cpt_bien]["client"] = $buffer; break;
      case "TYPE_OFFRE" : $tab_resultats[$cpt_bien]["type"] = $buffer; break;          
   }
   
 if( $name == "BIEN" ) {
   $cpt_bien++;      
    $buffer = '';          
   }                
}  
 
 
 
// XML - Character Data
function characterData($parser, $value) {
  global $buffer;  
  $buffer .= $value;      
}  
 
 
 
$fichierXML = "parseur.xml";
 
 
if(!($fp = fopen($fichierXML, "r" )))
{
  die("Fichier ".$fichierXML." non disponible" );
}
 $reponse_xml = fread($fp,filesize($fichierXML));
 
  $xml_parser = xml_parser_create();
  xml_set_element_handler($xml_parser, "startElement", "endElement" );
  xml_set_character_data_handler($xml_parser, "characterData" );
 
  if(!xml_parse($xml_parser, $reponse_xml)) {
   echo "erreur parse";
    die(xml_error_string(xml_get_error_code($xml_parser)));  
  }    
 
  xml_parser_free($xml_parser);
 
  $tab_resultats["nbr"] = $cpt_bien;  
  echo "<pre>";
  print_r($tab_resultats);
  echo "</pre>";


?>


 
Bonjour à tous, je souhaiterai savoir si quelqu'un peut me décrire un petit peu le fonctionnement du code ci dessus car je sens bien que c'est ce que je cherche mais je ne suis vraiment pas familier de la syntaxe php donc je pige pas grand chose ^^
 
Si quelqu'un peut me communiquer un lien ou m'expliquer ça, vous seriez bien sympas!
 
Merci


---------------
"S'il existe des gens capables, il suffit de produire l'effort pour devenir capable."

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Importer un fichier xml vers une BDD Mysql ?

 

Sujets relatifs
Liens paramètré vers une page de cadres ?Balise HREF : download d'un fichier HTML
[c++] Blocage d'un fichier .txtGras et italique dans un fichier js
Besoin de conseils pour créer une base mysqlModule de commentaire de news qui pointe vers un forum InvisionPB 1.3
Upload de fichier avec xmlhttprequestcréer un fichier .txt et faire un lien sur la .jsp / href (Websphere)
Dreamweaver MX se ferme en refusant d'enregistrer un fichier PHP modifPublipostage Word avec PHP/MySql
Plus de sujets relatifs à : Importer un fichier xml vers une BDD Mysql ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR