Page 1 sur 1
Importer un flux XML dans une base de donnée
Posté : 02 avr. 2007, 21:15
par dudu59
Bonjour,
J'aimerai importer les données d'un flux XML dans une base Mysql (phpMyadmin) afin de mémoriser le contenu. Il y a beaucoup de posts qui parle du chemin inverse mais je ne trouve rien dans le sens XML vers une base de donnée.
Pouvez-vous m'aider et/ou m'orienter ?
Merci.
Posté : 03 avr. 2007, 10:40
par dudu59
Je pense que je vais me tourner vers MagpieRss
http://magpierss.sourceforge.net/
Je pars sur la bonne voie ?

Posté : 03 avr. 2007, 14:09
par dudu59
Trouvé :
http://www.references-web.com/Parser-et ... x-XML.html
Seul défaut, il faut avoir php5 chez l'hébergeur.
Voici un bout de code intéressant :
Code : Tout sélectionner
<?php
//connection a la base de donnee
$dbhost = "";
$dbuser = ""; // mysql user
$dbpass = ""; // mysql password
$dbname = ""; // mysql database
$conn=mysql_connect($dbhost,$dbuser,$dbpass) or die(erreurServeurMySQL());
mysql_select_db($dbname,$conn) or die('Erreur de selection '.mysql_error());
$flux = simplexml_load_file('http://url-de-votre-flux-xml.com/flux.xml');
foreach ($flux->item as $item) {
$link = $item->link;
$nom = $item->nom;
$description = $item->description ;
echo 'link : '.$link.'<br />';
echo 'nom : '.$nom.'<br />';
echo 'description : '.$description.'<br />';
$sql = "INSERT INTO `flux_xml` (`id_item`, `link`, `nom`, `description`) VALUES ('', '$link', '$nom', '$description')";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
echo 'données inserées en base';
}
?>[/quote]
Posté : 03 avr. 2007, 22:02
par dudu59
Bon, j'ai l'impression de me parler à moi-même mais j'ai bon espoir que quelqu'un me vienne en aide...
Voilà mon fichier XML test :
http://www.technobuzz.fr/test_xml.xml
Je cherche à l'importer dans une table avec ce code :
Code : Tout sélectionner
<?
//connexion base de donnée
//on vérifie que le fichier est OK
if (file_exists('http://www.technobuzz.fr/test_xml.xml')) {
$flux = simplexml_load_file('http://www.technobuzz.fr/test_xml.xml');
} else {
exit('Erreur !....');
}
foreach ($flux->channel->product as $product) {
$name = $product->name;
$sql = "INSERT INTO `mabase` (`name`) VALUES ('$name')";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
echo 'données inserées en base';
}
?>
... mais j'ai le message d'erreur dès la lecture du fichier XML.
Quelqu'un saurait me dire ce qu'il se passe ?

Posté : 03 avr. 2007, 22:45
par jojolapine
bonsoir,
... mais j'ai le message d'erreur dès la lecture du fichier XML.
Quelqu'un saurait me dire ce qu'il se passe ?

Qu'est-ce que tu entends par là ? quel est exactement le message d'erreur ?
Posté : 03 avr. 2007, 23:46
par dudu59
Je pense qu'il y avait une mémoire tampon. J'ai vidé les caches et tout est OK.
Il y avait quand même une erreur : il fallait écrire
pour respecter le flux.
J'attaque demain les flux dans le flux : j'entend par là les sous-divisions de flux. J'ai par exemple le flux suivant :
Code : Tout sélectionner
<product>
<TDProductId>76301235</TDProductId>
<name>DCRD-VD405 E</name>
<description>DCRD-VD405 E CAMESCOPE DVD</description>
<imageUrl>http://www.site.com/images/moyen.gif</imageUrl>
<productUrl>monlien</productUrl>
<price>769.0</price>
<currency>EUR</currency>
<TDCategories>
<TDCategory>
<id>43</id>
<name>Camcorders</name>
<merchantName>PHOTO - VIDEO>Camescope numérique>DVD></merchantName>
</TDCategory>
</TDCategories>
<fields>
<field>
<name>marque</name>
<value>Sony</value>
</field>
<field>
<name>ean</name>
<value>4905524331103</value>
</field>
<field>
<name>fraislivraison2</name>
<value>6.9000</value>
</field>
<field>
<name>garantie</name>
<value>Garantie 2 ans</value>
</field>
<field>
<name>dispo</name>
<value>Expédition en 24h-48h</value>
</field>
<field>
<name>detailfraislivraison</name>
<value>Veuillez consulter le site</value>
</field>
</fields>
</product>
Je ne vois pas comment lire et intégrer dans ma base la suite après
<TDCategories> qui est une subdivision du flux <product>
A demain.
Posté : 04 avr. 2007, 17:07
par Victor BRITO
Salut!
<?php
// Chargement du fichier XML
$xml = simplexml_load_file ('url-du-fichier-xml');
// Récupération de l'élément TDCategories
$tdcategories = $xml -> TDCategories;
// Récupération d'un nœud dans TDCategories
$tdcategory = $tdcategories -> TDCategory;
// Pour les id, name et merchantName
$id = $tdcategory -> id;
$name = $tdcategory -> name;
$merchantname = $tdcategory -> merchantName;
?>
Sauf bêtise de ma part, ça doit marcher.

Posté : 07 avr. 2007, 10:52
par dudu59
Merci Victor mais je bute sur un caractère spécial dans la lecture du flux.
La lecture bloque sur le symbole suivant :
Exemple <titre>L'écran plat </titre>
Je vois bien comment le remplacer infine mais pas dans le mode lecture du XML.
Une solution ?
Voici le message d'erreur
Code : Tout sélectionner
Warning: Invalid argument supplied for foreach() in /home.10.11/technobu/www/script.php5 on line 12
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home.10.11/technobu/www/script.php5 on line 10
Posté : 10 avr. 2007, 16:08
par Victor BRITO
Probablement un caractère parasite dans le fichier XML généré. Mais, ce n'est pas le ' qui est en cause.
Posté : 10 avr. 2007, 16:35
par dudu59
Merci mais ce qui est bizarre, c'est que quand j'ouvre le fichier XML avec un éditeur de texte et que je fais "éditer-remplacer" ce fameux symbole "'" par un espace " ", je n'ai plus le problème ...