Importer un fichier xml vers une BDD Mysql ? - PHP - Programmation
Marsh Posté le 13-09-2005 à 13:48:23
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 |
mais cela ne semble pas fonctionner :
Citation : |
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"?> |
Pourquoi cette erreur ?
Que cela signifie t'il ?
Marsh Posté le 13-09-2005 à 13:49:13
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.
Marsh Posté le 13-09-2005 à 14:17:06
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>";
?>
Marsh Posté le 13-09-2005 à 15:32:18
oula, je m'attendais pas à un tel poste, mille merci Dens91
je viens de le tester et ca fonctionne à merveille
Marsh Posté le 13-09-2005 à 15:40:29
weed a écrit : |
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. |
Citation : If you want to work on both Windows and Linux, I found appending the following to the front of your file path works: |
Marsh Posté le 13-09-2005 à 16:02:46
weed a écrit : oula, je m'attendais pas à un tel poste, mille merci Dens91 |
Mais de rien, je m'ennui un peu a mon taf , mon chef de projet estime très mal le temps qu'il me faut pour developper. Donc je m'occupe comme je peux!!
Marsh Posté le 06-11-2006 à 16:01:41
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. |
Marsh Posté le 29-05-2009 à 12:05:00
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 ^^
Marsh Posté le 17-07-2009 à 10:33:34
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.
|
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
Marsh Posté le 13-09-2005 à 13:20:23
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 ?