[XML] [EXPAT] D'un document Xml vers une base de données
Bonjour à tous, je souhaite envoyer des données d'un fichier xml vers une base mysql. Pour ceci j'ai trouvé une fonction sur le net (des commentaires sur celle ci disent qu'elle marche).
Voila la table de ma base ou je veu ecrire:
idmoto
marque
modele
une partie de mon code xml:
Code:
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="ISO-8859-1" ?>
<liste>
<moto>
<idmoto>1</idmoto>
<marque>ducati</marque>
<modele>748</modele>
<photo>ducati748.jpg</photo>
<couleur>Rouge</couleur>
<annee>1999</annee>
<kilometre>18000</kilometre>
<prix>10000</prix> |
la fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| function insertXml ($arrElem, $arrChamps, $table, $fichierXml) {
$xml_parseur = xml_parser_create();
$fp = fopen($fichierXml, "r") or die("Fichier introuvable. L'analyse a ete suspendue");
while ($fdata = fread($fp, filesize ($fichierXml))){
xml_parse_into_struct ($xml_parseur, $fdata, $arrOutput) or die (sprintf("Erreur XML : %s à la ligne %d\n",
xml_error_string(xml_get_error_code($xml_parseur)),
xml_get_current_line_number($xml_parseur))
);
}
foreach ($arrOutput as $elem) {
if (in_array ($elem['tag'], $arrElem)) {
$arrReq[$elem['tag']][] = $elem['value'];
if (is_array ($elem['attributes'])){
foreach ($elem['attributes'] as $clef => $attr) {
if (in_array ($clef, $arrElem)) {
$arrReq[$clef][] = $attr;
}
}
}
}
}
if (is_array ($arrReq)) {
$cpt = count ($arrReq[$arrElem[0]]);
$strChamps = '';
foreach ($arrChamps as $champ) {
$strChamps .= '"'.$champ.'",';
}
$strChamps = rtrim ($strChamps, ',');
$i = 0;
while ($i < $cpt) {
$strTmp = '';
foreach ($arrReq as $clef => $dump) {
$strTmp .= '"'.$arrReq[$clef][$i].'",';
}
$strTmp = rtrim ($strTmp, ',');
$requeteTmp[] = $strTmp;
$i ++;
}
$i = 0;
while ($i < $cpt) {
$requete[] = 'INSERT INTO '.$table.' ('.$strChamps.') VALUES ('.$requeteTmp[$i].')';
$i ++;
}
return $requete;
}
return false;
} |
les consignes de son auteur:
Citation:
Les parametres a passer :
- $arrElem : tableau contenant tous les elements du fichier XML a inserer dans la BDD. C'est un tableau simple : array ('elem1', 'elem2'...). Les attributs doivent y etre mis de la meme maniere (si attributs il y a), ils seront inseres aussi dans un champ a part. Ex : array ('elem1', 'elem2', 'attr1'...)
- $arrChamps : les champs de votre base de donnees. Ces champs DOIVENT etre dans le meme ordre que les elenmts et attributs a inserer. De meme, evidemment, il doit y avoir dans ces 2 tableaux le meme nombre d'elements.
- $table : le nom de votre table.
- $fichierXml : le fichier xml.
et voila comment je l'appele:
Code:
1 2 3 4 5 6 7 8 9
| $arrElem = array ('idmoto', 'marque', 'modele');
$arrSql = array ('idmoto', 'marque', 'modele');
if (($arrRequetes = insertXml ($arrElem, $arrSql, 'import', 'ListeMotoOcaz.xml'))!== false) {
echo 'OK<pre>';
print_r ($arrRequetes);
echo '</pre>';
}
else
echo '<br /><br />Erreur, false retourne'; |
Mon erreur:
Citation:
Notice: Undefined variable: arrReq in e:\program files\easyphp1-7\www\motos\import.php on line 26
Erreur, false retourne
que faut il modifier? merci d'avance