je recherche le moyen d'envoyer le contenu d'un XML dans une BDD par l’intermédiaire d'un script PHP.
En parcourant le web,
j'ai pu mettre en place un script qui me permet de faire ce que je souhaite, mais uniquement pour des fichiers XML qui ont une structure simple de type GrandParent / Parent / Enfants.
Par contre, dès que l'arborescence se complique, par ecemple Arrière-GrandParent / GrandParent / Parent / Enfants / Petits-Enfants, mon script ne fonctionne plus.
Exemple qui fonctionne :
Fichier DublinCore.xml :
Code : Tout sélectionner
<?xml version='1.0' encoding='utf-8' ?>
<OI>
<DublinCore>
<title>16e Chapitre des Chevaliers du Pissala</title>
<description></description>
<publisher>CRT RIVIERA</publisher>
<Keywords xml:lang='fr' />
<Classification code='02.01.03'>Fêtes et Manifestations</Classification>
<ControlledVocabulary code='02.01.03.04.10'>Traditions et folklore</ControlledVocabulary>
<created>2012-05-11</created>
<valid>2012-09-16</valid>
<modified>2012-05-11</modified>
<identifier>FMAPAC006CRT0071102</identifier>
</DublinCore>
</OI>
Code : Tout sélectionner
<?php
$db = mysql_connect('xxxx', 'xxxx', 'xxxx') OR die('Erreur de connexion à la base');
mysql_select_db('xxxx',$db) OR die('Erreur de sélection de la base');
//Affichage du document dublinCore.xml
$OI_xml = simplexml_load_file('dublinCore.xml');
foreach ($OI_xml ->DublinCore as $DublinCore) {
print "title de DublinCore : {$DublinCore->title} <br />";
print "description de DublinCore: {$DublinCore->description} <br />";
print "publisher de DublinCore: {$DublinCore->publisher} <br />";
print "Classification de DublinCore: {$DublinCore->Classification} <br />";
print "ControlledVocabulary de DublinCore: {$DublinCore->ControlledVocabulary} <br />";
print "created de DublinCore: {$DublinCore->created} <br />";
print "valid de DublinCore: {$DublinCore->valid} <br />";
print "modified de DublinCore: {$DublinCore->modified} <br />";
print "identifier de DublinCore: {$DublinCore->identifier} <br />";
}
// envoi des infos dans la BDD
$req = "INSERT INTO OI (title, description, publisher, Classification, ControlledVocabulary, created, valid, modified, identifier) values ('$DublinCore->title','$DublinCore->description','$DublinCore->publisher','$DublinCore->Classification','$DublinCore->ControlledVocabulary','$DublinCore->created','$DublinCore->valid','$DublinCore->modified','$DublinCore->identifier') ";
mysql_query($req) or die("Erreur MySQL : ".mysql_error());
//Affichage du contenu de la table OI
$requete = mysql_query('SELECT * FROM OI') OR die('Erreur de la requête MySQL');
while($DublinCore = mysql_fetch_array($requete))
{
echo '
<p>ID :'.$DublinCore['id'].'<br/>
Titre :'.$DublinCore['title'].'<br/>
Description :'.$DublinCore['description'].'<br/>
Publisher :'.$DublinCore['publisher'].'<br/>
Classification :'.$DublinCore['Classification'].'<br/>
ControlledVocabulary :'.$DublinCore['ControlledVocabulary'].'<br/>
created :'.$DublinCore['created'].'<br/>
valid :'.$DublinCore['valid'].'<br/>
modified :'.$DublinCore['modified'].'<br/>
identifier :'.$DublinCore['identifier'].'</p>';
}
?>
Fichier Periodes.xml :
Code : Tout sélectionner
<?xml version='1.0' encoding='utf-8' ?>
<Periodes>
<DetailPeriode type='09.01.05'>
<Dates>
<DetailDates>
<DateDebut>2012-09-15</DateDebut>
<DateFin>2012-09-16</DateFin>
<ObservationDates>Du samedi 15 septembre 2012 au dimanche 16 septembre 2012</ObservationDates>
</DetailDates>
</Dates>
</DetailPeriode>
</Periodes>
Code : Tout sélectionner
<?php
$db = mysql_connect('xxxx', 'xxxx', 'xxxx') OR die('Erreur de connexion à la base');
mysql_select_db('xxxx',$db) OR die('Erreur de sélection de la base');
//Affichage du document periodes.xml
$Periodes_xml = simplexml_load_file('periodes.xml');
foreach ($Periodes_xml ->DetailDates as $DetailDates) {
print "DateDebut de periodes : {$DetailDates->DateDebut} <br />";
print "DateFin de periodes: {$DetailDates->DateFin} <br />";
print "ObservationDates de periodes: {$DetailDates->ObservationDates} <br />";
}
// envoi des infos dans la BDD
$req = "INSERT INTO periodes (DateDebut, DateFin, ObservationDates) values ('$DetailDates->DateDebut','$DetailDates->DateFin','$DetailDates->ObservationDates') ";
mysql_query($req) or die("Erreur MySQL : ".mysql_error());
//Affichage du contenu de la table periodes
$requete = mysql_query('SELECT * FROM periodes') OR die('Erreur de la requête MySQL');
while($DetailDates = mysql_fetch_array($requete))
{
echo '
<p>ID :'.$DetailDates['Id'].'<br/>
DateDebut :'.$DetailDates['DateDebut'].'<br/>
DateFin :'.$DetailDates['DateFin'].'<br/>
ObservationDates :'.$DetailDates['ObservationDates'].'</p>';
}
?>
Merci