XMLreader : comment sortir les résultats valeur par valeur

  • Auteur de la discussion Auteur de la discussion max6
  • Date de début Date de début
WRInaute discret
Bonjour à tous

Comme bien souvent , je fais appel aux compétences des membres de webrankinfo qui m'aident a chaque fois beaucoup dans la résolution de mes soucis .

Alors voila je traite un gros flux xml avec XMLreader , pour tout ce qui est lecture ca fonctionne parfaitement .

Ceci dit j'aimerai récupérer valeur par valeur en mettant chaque valeur dans une variable et ainsi inserer tout ca dans ma base de données mais la je sèche j'ai essayé 36 trucs et je suis arrivé a rien .

Voici le code de lecture qui fonctionne a merveille mais qui m'affiche les résutlats en 1 bloc :

Code:
<?php
$xmlReader = new XMLReader();
$xmlReader->open('wmt_sejours.xml'); 
echo '<sejour>';
while ($xmlReader->read()) 
{ 
$nom = utf8_decode($xmlReader->name);
$valeur = utf8_decode($xmlReader->value);
$type = utf8_decode($xmlReader->nodeType);

if ($type==3)
{
echo "$valeur<br>";
}

}
echo '</sejour>';
$xmlReader->close();
?>

Noton que le "type==3" est le noeud numéro 3 qui contient ce qui m'interesse pour l'inserer dans ma base .

Mais en faisant un if($type==3) ben forcement ca me renvoi dans la variable $valeur l'intégralité d'un enregistrement et il faut dispacher cet enregistrement .

La valeur me renvoie ca :

Code:
1088860
Séjour
Tunisie
Houmt Souk
1299
Hotel Sun Club 3*
3
125216
Pension complète / all inclusive
TN
8J/7N - AI SUN CLUB 3*+CM4J
Départ de MARSEILLE - MARSEILLE - DJERBA A/R - VOLS+HOTEL 3*+TOUT INCLUS+CURE
539
1 semaine environ
Marseille
MRS
DESCRIPTION ....

Et donc chaque ligne doit valoir une variable , par exemple la premiere ligne "1088860" doit aller dans une variable qu'on appelera ID et ainsi de suite pour les autres lignes .

Avez une solution ?

Merci
Max
 
WRInaute accro
tiens, j'ai fait une moulinette d import / export de BDD dans ce style, par contre le fichier que je génère a plutot cette forme :

enregistrement
champ1_de_ma_table
valeur
champ2_de_ma_table
valeur valeur
valeur valeur valeur
valeur
champ3_de_ma_table
...


enregistrement
champ1_de_ma_table
valeur
champ2_de_ma_table
valeur valeur
valeur valeur valeur
valeur
champ3_de_ma_table
...

le fichier que tu reçois ne peut pas être modifié ?
 
WRInaute discret
Et non , en plus il fait 500Mo lol

La mimolette dont tu parles je l'ai essayé avec des switch case mais rien a faire ...

Dois falloir trouver le jeu de boucle adequate


Moulinette pardon
 
WRInaute accro
je suppose que le nombre de lignes peut changer d'un enregistrement à un autre (ex : description sur plusieurs lignes) ?
 
WRInaute discret
Oui tout a fait

Surout que les description sont ENORME .

Et que avant d'inserer quoi que ce soit dans ma base , je dois tdabbord faire plusieurs select/update et ensuite inserer .

En fait j'ai utilisé simplexml mais rien a faire le fichier est bien trop gros alors je me suis tourné vers ce lecteur .

Il faut impérativement que j'arrive a tirer de ce lecteur des variables pour chaque champs .
 
WRInaute discret
Je galere ca marche vraiment pas et les résultats attendus c'et vraiment pas ca .

Au passage qu'est ce qui pourrait faire bloquer SImplexml sur mon serveur pour la lecture d'un gros flux ? (parcque c quand meme plus simple comme lecteur)
 
WRInaute passionné
J'ai dans l'idée que la capacité de traitement d'un poste de travail ne permettra pas de parser un fichier de 500Mo.
 
WRInaute discret
Apperemment certains y arrivent , dailleurs ceux qui me fournissent le flux le traite comme ca avec simplexml donc c'est bien que c'est possible mais comment ...
 
WRInaute impliqué
salut,
j'ai un bout de code en XMLReader si ca peux te donner des idées, celui-ci parse un fichier xml déjà costaud
Code:
        $reader = new XMLReader();

	$reader->open( $fichier );

	while( $reader->read() ) {
        switch ($reader->nodeType) {
	       	case (XMLREADER::ELEMENT):
				switch( $reader->localName ) {
					case "CATALOGUE" :
					break;
					case "BOUTIQUE" :
					break;
					case "RAYON" :
$reader->getAttribute( "nom" );
					break;
					case "REFERENCE": 
						$reader->read();
						$code = $reader->value;
					break;
					case "DESIGNATION" :
						$reader->read();
					break;
					case "DESCRIPTION" :
						$reader->read();
					break;			  
					case "MARQUE" :
						$reader->read();
					break;
					case "PRIX" :
						$reader->read();
					break;
			}
			break;
			CASE (XMLREADER::END_ELEMENT) :
				if( $reader->localName == "PRODUIT" ) {

				}	
			break;
		}
	}
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut