Insert fichier xml dans BDD avec des sous noeuds
Bonjour,
Je recherche de l'aide concernant une insertion en php d'un fichier xml avec des sous noeuds identique.
Le fichier xml est envoyé automatiquement tous les jours sur un ftp.
Code fichier immo.xml :
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
| <?xml version="1.0" encoding="iso-8859-15" standalone="yes"?>
<biens>
<bien id="0">
<reference>1234</reference>
<code_agence>1</code_agence>
<num_mandat>m1</num_mandat>
<nom_agence>xxx</nom_agence>
<code_postal>00000</code_postal>
<ville>XXXX</ville>
<type_bien>maison</type_bien>
<prix>72000</prix>
<images>
<image>http://xxx.com/image/1234_1_1_M.jpg</image>
<image>http://xxx.com/image/1234_1_2_M.jpg</image>
<image>http://xxx.com/image/1234_1_3_M.jpg</image>
<image>http://xxx.com/image/1234_1_4_M.jpg</image>
<image>http://xxx.com/image/1234_1_5_M.jpg</image>
</images>
</bien>
<bien id="1">
<reference>5678</reference>
<code_agence>1</code_agence>
<num_mandat>m2</num_mandat>
<nom_agence>xxx</nom_agence>
<code_postal>00000</code_postal>
<ville>XXXX</ville>
<type_bien>appartement</type_bien>
<prix>52000</prix>
<images>
<image>http://xxx.com/image/5678_1_1_M.jpg</image>
<image>http://xxx.com/image/5678_1_2_M.jpg</image>
<image>http://xxx.com/image/5678_1_3_M.jpg</image>
</images>
</bien>
</biens> |
J'arrive à insérer tous les champs dans ma base de données sauf les images. C'est que la 1ère image qui est insérée. Mon problème se situe donc sur l'insertion des images.
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
Code insert.php :
<?php
function apo($s1)
{
$s1 = trim($s1); // suppr les espaces
$s1 = trim($s1, "\xA0" ); // suppr les nbsp
$s1 = stripslashes($s1); // suppr les slashs avant les apostrophes
$s1 = str_replace("'", "''", $s1); // remplace les guillemets
// supprime les caractères non imprimables
$s2 = "";
for ($i = 0; $i < strlen($s1); $i++) {
$c = substr($s1, $i, 1);
if (ord($c) >= 32)
$s2 .= $c;
}
return($s2);
}
// Récupération du fichier
$recup = simplexml_load_file("http://www.xxx.com/dossier/immo.xml");
// On lance la fonction
frecur($recup);
/**
Fonction frecur
*/
function frecur($racine, $niveau = 0) {
// Pour chaque item
foreach($racine as $nom=>$texte) {
// Pour le noeud enfant
if(trim($texte) == "") {
for($i=1;$i<=$niveau;$i++) { echo " "; }
// on affiche le nom
echo "La balise <strong>".$nom."</strong>";
// on récupere les enfants
$enfants = $texte->children();
// on récupere les attributs s'ils sont présents
$str = "";
$attributs = $texte->attributes();
if(trim($attributs) != "") {
$str = "(";
foreach($attributs as $index=>$contenu) {
$str .= "[<strong>".$index."</strong>] <em>".$contenu."</em>, ";
}
$str = substr($str, 0, -2).")"; // Pour la mise en forme
}
echo $str."
";
// comme on a un enfant, on réappelle la fonction (le niveau sert juste à la mise en forme)
frecur($enfants, $niveau + 0);
$bien=$texte;
} else {
// si on n'a pas d'enfant, on affiche ce qu'il y a dedans
for($i=1;$i<=$niveau;$i++) { echo " ";}
echo "La balise <strong>".$nom."</strong> contient <em>".$texte."<br />\n</em>
";
}
mysql_query("INSERT INTO table SET BienReference='".apo($bien->reference)."' ,BienAgence='".apo($bien->code_agence)."' ,BienMandat='".apo($bien->num_mandat)."' ,AgenceNom='".apo($bien->nom_agence)."' ,BienCodePostal='".apo($bien->code_postal)."' ,BienVille='".apo($bien->ville)."' ,BienType='".apo($bien->type_bien)."' ,BienPrix='".apo($bien->prix)."' ,BienImages1='".apo($elem->images->image)."' ,BienImages2='".apo($elem->images->image)."' ,BienImages3='".apo($enfants->images->image)."' ,BienImages4='".apo($enfants->images->image)."' ,BienImages5='".apo($enfants->images->image)."'") or die("Erreur MySQL : ".mysql_error());
}
}
?> |
Merci pour votre aide.