Parser un xml ( durée du traitement )
20 messages • Page 1 sur 2 • 1, 2
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Parser un xml ( durée du traitement )
Bonjour,
J'essaye de parser actuellement un catalogue de produits dont le xml ressemble à cela puis j'insére le contenu en Base de donnée mysql.
Après plusieurs essais je suis arrivé à une solution qui fonctionne mais qui me parait très lourde en effet lorsque je parse un fichier contenant au alentour de 800 produits ( fichier 4 Mo environ ), j'arrive à une exécution du script de pres de 45s. ( sachant que j'ai plusieurs fichiers de cette taille à traiter: on se rend bien compte que je vais avoir un problème de charge...)
Dans le script ci-dessous. Mon principe et d'enregistrer dans un tableau toutes les données d'un produit. Une fois la balise de fermeture du produit atteinte j'enregistre le contenu du tableau en bdd.
Ensuite je réinitialise le tableau et je recommence pour le produit suivant et ainsi de suite...
Mon but actuellement et d'optimiser ce code et d'accélérer l'exécution.
Mais la j'ai trop réfléchi, je suis à court d'idées.
Ou alors il va falloir que je trouve une autre méthode.
Merci pour votre aide , j'en ai bien besoin
J'essaye de parser actuellement un catalogue de produits dont le xml ressemble à cela puis j'insére le contenu en Base de donnée mysql.
- Code: Tout sélectionner
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<products>
<product>
<id>896292</id>
<name>nom</name>
<manufacturer>marque</manufacturer>
<manufacturer-id>22</manufacturer-id>
<description>description</description>
<category>category</category>
<category-id>2</category-id>
<number-of-retailers>16</number-of-retailers>
<image-url height="108" width="150">image-url</image-url>
<rating type="professional">
<average>4,1</average>
<num-ratings>8</num-ratings>
</rating>
<lowest-price currency="EUR"prix bas</lowest-price>
<highest-price currency="EUR">prix-haut</highest-price>
<properties>
<group>
<name>Caractéristiques du produit</name>
<property>
<id>3916</id>
<name>caract1</name>
<value>valeur</value>
</property>
</group>
<group>
<name>nom</name>
<property>
<id>13</id>
<name>Type </name>
<value>valeur</value>
</property>
</group>
</properties>
<retailer>
<id>27907</id>
<name>nom1</name>
<link>lien</link>
<logo height="50" width="150">image logo</logo>
<stock-info>Disponible en stock</stock-info>
<price currency="EUR">prix</price>
<source-type>www</source-type>
<source-date>2008-07-04</source-date>
<price-with-shipping-min currency="EUR">prix1</price-with-shipping-min>
<price-with-shipping-max currency="EUR">prix2</price-with-shipping-max>
</retailer>
<retailer>
<id>27800</id>
<name>nom2</name>
<link>lien2</link>
<logo height="50" width="150">image2 logo</logo>
<stock-info>Disponible en stock</stock-info>
<price currency="EUR">prix2</price>
<source-type>www</source-type>
<source-date>2008-07-04</source-date>
<price-with-shipping-min currency="EUR">prix1bis</price-with-shipping-min>
<price-with-shipping-max currency="EUR">prix2bis</price-with-shipping-max>
</retailer>
</product>
</products>
Après plusieurs essais je suis arrivé à une solution qui fonctionne mais qui me parait très lourde en effet lorsque je parse un fichier contenant au alentour de 800 produits ( fichier 4 Mo environ ), j'arrive à une exécution du script de pres de 45s. ( sachant que j'ai plusieurs fichiers de cette taille à traiter: on se rend bien compte que je vais avoir un problème de charge...)
Dans le script ci-dessous. Mon principe et d'enregistrer dans un tableau toutes les données d'un produit. Une fois la balise de fermeture du produit atteinte j'enregistre le contenu du tableau en bdd.
Ensuite je réinitialise le tableau et je recommence pour le produit suivant et ainsi de suite...
Mon but actuellement et d'optimiser ce code et d'accélérer l'exécution.
Mais la j'ai trop réfléchi, je suis à court d'idées.
- Code: Tout sélectionner
<?php
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter");
$profondeur = array(); // profondeur des items
$tableau = array(); // tableau pour l'enregistrement des contenus
$fichier = "test.xml"; // fichier xml
// *********************************************************** DEBUT BALISE OUVRANTE *******************************************************************************************
function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
global $derniereBaliseRencontree;
$derniereBaliseRencontree = $nomBalise;
global $profondeur;
global $fin_produit;
global $tableau;
$profondeur[$parseur]++;
// Si on rencontre la balise PRODUCT ( nouveau produit) , on réinitialise le tableau
if ($derniereBaliseRencontree=="PRODUCT")
{
$tableau = array(); // vide le tableau
$id_categorie="";
$categorie="";
$id_produit="";
$produit="";
$marque="";
$description="";
$image="";
$nombre_marchands="";
$tarif_moins="";
$tarif_plus="";
}
// detection fin presentation produit
if ($derniereBaliseRencontree=="PROPERTIES") {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]="fin_produit";}
}// Fin fonction balise ouvrante
// *********************************************************** FIN BALISE OUVRANTE *******************************************************************************************
// *********************************************************** DEBUT BALISE FERMANTE *******************************************************************************************
function fonctionBaliseFermante($parseur, $nomBalise)
{
// On oublie la dernière balise rencontrée
global $derniereBaliseRencontree;
$derniereBaliseRencontree = "";
global $profondeur;
global $tableau;
global $balisefermante;
$balisefermante=$nomBalise;
// recherche marchand
if ($balisefermante=="RETAILER") {$tableau[][$profondeur[$parseur]][$balisefermante]="fin_marchand";}// fin marchand
if ($balisefermante=="PROPERTY") {$tableau[][$profondeur[$parseur]][$balisefermante]="fin_propriete";} // Fin propriétés
if ($balisefermante=="PRODUCT") // détection fin de produit et enregistrement en BDD
{
// Bouclage sur tous les éléments du tableau
for($i=0;$i<sizeof($tableau);$i+=1)
{
if (($tableau[$i]['3']['CATEGORY-ID'])!="") {$id_categorie = $tableau[$i]['3']['CATEGORY-ID']; }
if (($tableau[$i]['3']['CATEGORY'])!="") {$categorie = $tableau[$i]['3']['CATEGORY']; }
if (($tableau[$i]['3']['ID'])!="") {$id_produit = $tableau[$i]['3']['ID']; }
if (($tableau[$i]['3']['NAME'])!="") {$produit =$tableau[$i]['3']['NAME']; }
if (($tableau[$i]['3']['MANUFACTURER'])!="") {$marque = $tableau[$i]['3']['MANUFACTURER']; }
if (($tableau[$i]['3']['DESCRIPTION'])!="") {$description = $tableau[$i]['3']['DESCRIPTION']; }
if (($tableau[$i]['3']['IMAGE-URL'])!="") {$image = $tableau[$i]['3']['IMAGE-URL']; }
if (($tableau[$i]['3']['NUMBER-OF-RETAILERS'])!="") {$nombre_marchands = $tableau[$i]['3']['NUMBER-OF-RETAILERS']; }
if (($tableau[$i]['3']['LOWEST-PRICE'])!="") {$tarif_moins = $tableau[$i]['3']['LOWEST-PRICE']; }
if (($tableau[$i]['3']['HIGHEST-PRICE'])!="") {$tarif_plus = $tableau[$i]['3']['HIGHEST-PRICE'];}
if (($tableau[$i]['6']['NAME'])!="") {$caracteristique=$tableau[$i]['6']['NAME'];}
if (($tableau[$i]['6']['VALUE'])!="") {$valeur_caracteristique=$tableau[$i]['6']['VALUE'];}
if (($tableau[$i]['4']['NAME'])!="") { $marchand = $tableau[$i]['4']['NAME']; }
if (($tableau[$i]['4']['LINK'])!="") { $lien = $tableau[$i]['4']['LINK']; }
if (($tableau[$i]['4']['LOGO'])!="") { $logo = $tableau[$i]['4']['LOGO']; }
if (($tableau[$i]['4']['STOCK-INFO'])!="") { $stock = $tableau[$i]['4']['STOCK-INFO']; }
if (($tableau[$i]['4']['PRICE'])!="") { $prix= $tableau[$i]['4']['PRICE']; }
if (($tableau[$i]['4']['PRICE-WITH-SHIPPING-MIN'])!="") { $prix_avec_frais = $tableau[$i]['4']['PRICE-WITH-SHIPPING-MIN']; }
//*********************************************************************************************** enregistrement des produits
if (($tableau[$i]['3']['PROPERTIES'])=="fin_produit")
{
$table="table1";
$query = 'INSERT INTO `'.$table.'` (`id_categorie`,`categorie`,`id_produit`,`produit`,`marque`,`description`,`image`,`nombre_marchands`,`tarif_moins`,`tarif_plus`) VALUES (\''.$id_categorie.'\', \''.$categorie.'\', \''.$id_produit.'\', \''.$produit.'\', \''.$marque.'\', \''.$description.'\', \''.$image.'\', \''.$nombre_marchands.'\', \''.$tarif_moins.'\', \''.$tarif_plus.'\');';
$result = mysql_query($query);
}
//**********************************************************************************enregistrement des caractéristiques des produits
if (($tableau[$i]['5']['PROPERTY'])=="fin_propriete")
{
$table="table2";
$query = 'INSERT INTO `'.$table.'` (`id_produit`,`id_categorie`,`caracteristique`,`valeur_caracteristique`) VALUES (\''.$id_produit.'\', \''.$id_categorie.'\', \''.$caracteristique.'\', \''.$valeur_caracteristique.'\');';
$result = mysql_query($query);
$caracteristique="";$valeur_caracteristique="";
}
//*****************************************************************************enregistrement des caractéristiques des marchands
if (($tableau[$i]['3']['RETAILER'])=="fin_marchand")
{
$table="table3";
$query = 'INSERT INTO `'.$table.'` (`id_produit`,`id_categorie`,`marchand`,`lien`,`logo`,`stock`,`prix`,`prix_frais_port`) VALUES (\''.$id_produit.'\', \''.$id_categorie.'\', \''.$marchand.'\', \''.$lien.'\', \''.$logo.'\', \''.$stock.'\', \''.$prix.'\', \''.$prix_avec_frais.'\');';
$result = mysql_query($query);
$marchand="";$lien="";$logo="";$stock="";$prix="";$prix_avec_frais="";
}
} // FIN boucle for
}//FIN produit
$profondeur[$parseur]--;
}//FIN balise fermante
// *********************************************************** FIN BALISE FERMANTE *******************************************************************************************
function fonctionTexte($parseur, $texte)
{
global $derniereBaliseRencontree;
global $profondeur;
global $tableau;
if (($derniereBaliseRencontree=="ID")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="NAME")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="MANUFACTURER")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="DESCRIPTION")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="CATEGORY")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="CATEGORY-ID")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="NUMBER-OF-RETAILERS")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="IMAGE-URL")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="LOWEST-PRICE")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="HIGHEST-PRICE")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="VALUE")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="LINK")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="LOGO")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="STOCK-INFO")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="PRICE")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
if (($derniereBaliseRencontree=="PRICE-WITH-SHIPPING-MIN")) {$tableau[][$profondeur[$parseur]][$derniereBaliseRencontree]=$texte; }
}
// Création du parseur XML
$parseurXML = xml_parser_create();
xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante", "fonctionBaliseFermante");
xml_set_character_data_handler($parseurXML, "fonctionTexte");
// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");
// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024))
{
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");
}
xml_parser_free($parseurXML);
fclose($fp);
//*********************************************
mysql_close();
?>
Merci pour votre aide , j'en ai bien besoin
Dernière édition par seabird le Dim Juil 06, 2008 0:33, édité 1 fois.
bon, c'est vrai que le code est compliqué à relire, après plusieurs minutes d'effort, je comprend pas la logique du $tableau[]
mais bon je me dis que cela ne peux venir que de cette boucle (pour peux que cela soit mal nettoyé)
peut etre rajouter une trace pour etre sur que sizeof($tableau) n'est pas exponentiel...
tu lances ce script sur quel config système ?
mais bon je me dis que cela ne peux venir que de cette boucle (pour peux que cela soit mal nettoyé)
- Code: Tout sélectionner
// Bouclage sur tous les éléments du tableau
for($i=0;$i<sizeof($tableau);$i+=1)
peut etre rajouter une trace pour etre sur que sizeof($tableau) n'est pas exponentiel...
tu lances ce script sur quel config système ?
julienr a écrit:bon, c'est vrai que le code est compliqué à relire, après plusieurs minutes d'effort, je comprend pas la logique du $tableau[]
mais bon je me dis que cela ne peux venir que de cette boucle (pour peux que cela soit mal nettoyé)
- Code: Tout sélectionner
// Bouclage sur tous les éléments du tableau
for($i=0;$i<sizeof($tableau);$i+=1)
peut etre rajouter une trace pour etre sur que sizeof($tableau) n'est pas exponentiel...
tu lances ce script sur quel config système ?
Merci d'essayer de prendre le temps de me relire
En fait j'ai mis le tableau , à cause de l'insertion en base de donnée pour que tous les éléments d'un produit soient sur une même ligne. Mais peut -être que l'on peut faire autrement
Pour le sizeof($tableau). Je viens d'afficher les tailles des tableaux pour 100 produits par exemple. Et c'est vrai que toutes ces boucles cela doit être long. Voila ce que j'ai obtenu.
- Code: Tout sélectionner
243
274
272
306
106
179
155
300
153
275
164
218
324
236
284
226
220
183
333
268
245
233
292
219
265
161
239
271
121
168
115
283
175
171
278
273
171
163
276
341
291
156
325
282
170
340
227
228
249
199
253
291
227
151
144
183
213
144
261
205
210
286
221
143
166
202
253
239
192
142
147
145
209
176
139
156
150
242
229
187
226
139
199
122
178
172
160
162
152
258
115
158
103
311
211
169
140
150
286
128
En fait je n'aurais pas trop de problème s'il y avait des balises de nom différents pour une caractéristique donnée.
Mais ici en plus du nom de la balise, il faut que je teste également la profondeur.
Pour bien faire , il faudrait que je rentre les données dans la base au fur et à mesure que je parcours le flux.
On va essayer .....
Mais ici en plus du nom de la balise, il faut que je teste également la profondeur.
Pour bien faire , il faudrait que je rentre les données dans la base au fur et à mesure que je parcours le flux.
On va essayer .....
Bon ça y est j'ai recodé sans utiliser de tableau et de boucle. Ca marche mais c'est toujours aussi long pfffff. Il met exactement 1min 30 pour 900 produits.
Par contre ce qui est bizarre , c'est que je n'ai plus le message:
" Maximum execution time of 30 seconds exceeded ". Le script continu au-dela de 30 s sans problème.
J'ai remarqué aussi que malgré
Sinon voici le nouveau code:
La j'ai épuisé mes ressources. Je ne sais plus comment faire.
Par contre ce qui est bizarre , c'est que je n'ai plus le message:
" Maximum execution time of 30 seconds exceeded ". Le script continu au-dela de 30 s sans problème.
J'ai remarqué aussi que malgré
- Code: Tout sélectionner
@ignore_user_abort(false);
Sinon voici le nouveau code:
- Code: Tout sélectionner
<?php
@ignore_user_abort(false);
include 'bdd.php';
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter");
$profondeur = array(); // profondeur des items
$fichier = "fichier.xml";
// *********************************************************** BALISE OUVRANTE *******************************************************************************************
function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
global $derniereBaliseRencontree;
$derniereBaliseRencontree = $nomBalise;
global $profondeur;
$profondeur[$parseur]++;
}// Fin fonction balise ouvrante
// *********************************************************** BALISE FERMANTE *******************************************************************************************
function fonctionBaliseFermante($parseur, $nomBalise)
{
// On oublie la dernière balise rencontrée
global $derniereBaliseRencontree;
$derniereBaliseRencontree = "";
global $profondeur;
global $balisefermante;
$balisefermante=$nomBalise;
if ($balisefermante=="PRODUCTS") {exit;}
$profondeur[$parseur]--;
}//FIN balise fermante
function fonctionTexte($parseur, $texte)
{
global $derniereBaliseRencontree;
global $profondeur;
global $id_produit;
global $id_categorie;
global $caracteristique;
global $marchand;
global $lien;
global $logo;
global $stock;
global $prix;
if (($derniereBaliseRencontree=="ID") && $profondeur[$parseur]==3) {
$table="table1";
$id_produit=$texte;
$query = 'INSERT INTO `'.$table.'` (`id_produit`) VALUES ( \''.$texte.'\')';
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="NAME") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET produit='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="MANUFACTURER") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET marque='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="DESCRIPTION") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET description='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="CATEGORY") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET categorie='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="CATEGORY-ID") && $profondeur[$parseur]==3) {
$table="table1";
$id_categorie=$texte;
$query = "UPDATE $table SET id_categorie='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="NUMBER-OF-RETAILERS") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET nombre_marchands='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="IMAGE-URL") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET image='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="LOWEST-PRICE") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET tarif_moins='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
if (($derniereBaliseRencontree=="HIGHEST-PRICE") && $profondeur[$parseur]==3) {
$table="table1";
$query = "UPDATE $table SET tarif_plus='$texte' where id_produit = '$id_produit' ";
$result = mysql_query($query);
}
// ******************************************************** ECRITURE CARACTERISTIQUES **************************************************************************
if (($derniereBaliseRencontree=="NAME") && $profondeur[$parseur]==6) {
$table="table2";
$caracteristique=$texte;
}
if (($derniereBaliseRencontree=="VALUE") && $profondeur[$parseur]==6) {
$table="table2";
$query = 'INSERT INTO `'.$table.'` (`id_produit`,`id_categorie`,`caracteristique`,`valeur_caracteristique`) VALUES (\''.$id_produit.'\', \''.$id_categorie.'\', \''.$caracteristique.'\', \''.$texte.'\');';
$result = mysql_query($query);
}
//********************************************* ECRITURE MARCHANDS *******************************************************************************
if (($derniereBaliseRencontree=="NAME") && $profondeur[$parseur]==4) {
$table="table3";
$marchand=$texte;
}
if (($derniereBaliseRencontree=="LINK") && $profondeur[$parseur]==4) {
$table="table3";
$lien=$texte;
}
if (($derniereBaliseRencontree=="LOGO") && $profondeur[$parseur]==4) {
$table="table3";
$logo=$texte;
}
if (($derniereBaliseRencontree=="STOCK-INFO") && $profondeur[$parseur]==4) {
$table="table3";
$stock=$texte;
}
if (($derniereBaliseRencontree=="PRICE") && $profondeur[$parseur]==4) {
$table="table3";
$prix=$texte;
}
if (($derniereBaliseRencontree=="PRICE-WITH-SHIPPING-MIN") && $profondeur[$parseur]==4) {
$table="table3";
$query = 'INSERT INTO `'.$table.'` (`id_produit`,`id_categorie`,`marchand`,`lien`,`logo`,`stock`,`prix`,`prix_frais_port`) VALUES (\''.$id_produit.'\', \''.$id_categorie.'\', \''.$marchand.'\', \''.$lien.'\', \''.$logo.'\', \''.$stock.'\', \''.$prix.'\', \''.$texte.'\');';
$result = mysql_query($query);
}
} // fin fonctioTexte
// Création du parseur XML
$parseurXML = xml_parser_create();
xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante", "fonctionBaliseFermante");
xml_set_character_data_handler($parseurXML, "fonctionTexte");
// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");
// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024))
{
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");
}
xml_parser_free($parseurXML);
fclose($fp);
echo "LECTURE ACCOMPLI";
mysql_close();
?>
La j'ai épuisé mes ressources. Je ne sais plus comment faire.
oui là tu es pénalisé parce que tu fais bcp plus de requêtes. Voici la base d'un bout de code qui sera facilement modifiable pour y insérer tes requêtes :
ce qui affiche :
ensuite si toujours pas de perf faudra voir à changer de serveur ...
- Code: Tout sélectionner
function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
global $profondeur;
global $tableau;
array_push( $profondeur, $nomBalise );
if( count($tableauAttributs) > 0 )
{
$path = implode( "_", $profondeur );
foreach( $tableauAttributs as $k => $v )
{
$tableau[$path."_".$k] = $v;
}
}
}
function fonctionBaliseFermante($parseur, $nomBalise)
{
global $profondeur;
global $tableau;
if ($nomBalise=="PRODUCT")
{
print_r( $tableau );
$tableau=array();
}
array_pop( $profondeur );
}
function fonctionTexte($parseur, $texte)
{
global $profondeur;
global $tableau;
$path = implode( "_", $profondeur );
$tableau[$path] = $texte;
}
ce qui affiche :
- Code: Tout sélectionner
Array
(
[PRODUCTS] =>
[PRODUCTS_PRODUCT] =>
[PRODUCTS_PRODUCT_ID] => 896292
[PRODUCTS_PRODUCT_NAME] => nom
[PRODUCTS_PRODUCT_MANUFACTURER] => marque
[PRODUCTS_PRODUCT_MANUFACTURER-ID] => 22
[PRODUCTS_PRODUCT_DESCRIPTION] => description
[PRODUCTS_PRODUCT_CATEGORY] => category
[PRODUCTS_PRODUCT_CATEGORY-ID] => 2
[PRODUCTS_PRODUCT_NUMBER-OF-RETAILERS] => 16
[PRODUCTS_PRODUCT_IMAGE-URL_HEIGHT] => 108
[PRODUCTS_PRODUCT_IMAGE-URL_WIDTH] => 150
[PRODUCTS_PRODUCT_IMAGE-URL] => image-url
[PRODUCTS_PRODUCT_RATING_TYPE] => professional
[PRODUCTS_PRODUCT_RATING] =>
[PRODUCTS_PRODUCT_RATING_AVERAGE] => 4,1
[PRODUCTS_PRODUCT_RATING_NUM-RATINGS] => 8
[PRODUCTS_PRODUCT_LOWEST-PRICE_CURRENCY] => EUR
[PRODUCTS_PRODUCT_LOWEST-PRICE] => prix bas
[PRODUCTS_PRODUCT_HIGHEST-PRICE_CURRENCY] => EUR
[PRODUCTS_PRODUCT_HIGHEST-PRICE] => prix-haut
[PRODUCTS_PRODUCT_PROPERTIES] =>
[PRODUCTS_PRODUCT_PROPERTIES_GROUP] =>
[PRODUCTS_PRODUCT_PROPERTIES_GROUP_NAME] => nom
[PRODUCTS_PRODUCT_PROPERTIES_GROUP_PROPERTY] =>
[PRODUCTS_PRODUCT_PROPERTIES_GROUP_PROPERTY_ID] => 13
[PRODUCTS_PRODUCT_PROPERTIES_GROUP_PROPERTY_NAME] => Type
[PRODUCTS_PRODUCT_PROPERTIES_GROUP_PROPERTY_VALUE] => valeur
[PRODUCTS_PRODUCT_RETAILER] =>
[PRODUCTS_PRODUCT_RETAILER_ID] => 27907
[PRODUCTS_PRODUCT_RETAILER_NAME] => nom1
[PRODUCTS_PRODUCT_RETAILER_LINK] => lien
[PRODUCTS_PRODUCT_RETAILER_LOGO_HEIGHT] => 50
[PRODUCTS_PRODUCT_RETAILER_LOGO_WIDTH] => 150
[PRODUCTS_PRODUCT_RETAILER_LOGO] => image logo
[PRODUCTS_PRODUCT_RETAILER_STOCK-INFO] => Disponible en stock
[PRODUCTS_PRODUCT_RETAILER_PRICE_CURRENCY] => EUR
[PRODUCTS_PRODUCT_RETAILER_PRICE] => prix
[PRODUCTS_PRODUCT_RETAILER_SOURCE-TYPE] => www
[PRODUCTS_PRODUCT_RETAILER_SOURCE-DATE] => 2008-07-04
[PRODUCTS_PRODUCT_RETAILER_PRICE-WITH-SHIPPING-MIN_CURRENCY] => EUR
[PRODUCTS_PRODUCT_RETAILER_PRICE-WITH-SHIPPING-MIN] => prix1
[PRODUCTS_PRODUCT_RETAILER_PRICE-WITH-SHIPPING-MAX_CURRENCY] => EUR
[PRODUCTS_PRODUCT_RETAILER_PRICE-WITH-SHIPPING-MAX] => prix2
)
ensuite si toujours pas de perf faudra voir à changer de serveur ...
20 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Google dépose 2 brevets pour AdSense
- Google Enterprise a son blog
- Le blog de Google Analytics
- Le blog officiel de Google Research
- Un (RSS) pour tous (les blogs officiels de Google)
- Le blog officiel de Google au Japon
- Le blog officiel de Google Custom Search (CSE)
- La syndication de contenu : afficher un flux RSS sur son site
- Le blog officiel de Google AdWords en français - Inside AdWords FR
- The Technology Behind Google
- Parser XML
- Parser un xml simple
- Parser xml php
- Logiciel Parser de Xml
- parser un document xml
- Parser XMl avec PHP 5
- probleme pour parser du xml
- Difficulté à parser du XML avec simpleXML()
- Parser un xml voluminueux sur plusieurs pages ?
- problem pour parser un flux xml avec magpierss
- Parser et mettre en page php un gros flux xml
- Parser XML balises sur plusieurs niveaux (API amazon)
- parser et sauver un flux XML dans une bdd > je sèche
- Traitement de gros fichiers XML
- Traitement feed XML et caractères accentués
Consultez la description détaillée des produits ou services de Google suivants : API Google Checkout
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités





le forum