Bonjour,
j'essaie de parser de manière très basique un fichier XML, et j'obtiens des performances catastrophiques (dans les 5 secondes pour traiter un fichier qui met moins de 0,1 secondes pour être parsé de la même manière en excel vba, la honte...).
Les deux approches sonts ci dessous, elles sont toutes les deux aussi lentes. Auriez vous des idées pour accélerer les traitements ?
Variante DOM :
Variante SimpleXML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 function parserListeValeursXML($urlfichier,$nom_champ) { //objets et variables $tableauRetour = array(); $index = 0; //chargement $dom = DOMDocument::load($urlfichier); if(!$dom) die('Erreur lecture fichier XML'); $racine=$dom->getElementsByTagName('Liste_valeurs')->item(0); $listeEnregistrements = $dom->getElementsByTagName('enregistrement'); //parcours des objets if (count($listeEnregistrements) > 0) { foreach ($listeEnregistrements as $enregistrement) { $tableauRetour[$index] = $enregistrement->nodeValue; $index = $index + 1 ; } return($tableauRetour); } else { return(false); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 function parserListeValeursXML($urlfichier,$nom_champ) { //objets et variables $tableauRetour = array(); $index = 0; //lecture et chargement chargement $handle = fopen($urlfichier,'r'); $xmlbrut = ''; while (!feof($handle)) { $xmlbrut .= fread($handle, 1024); } fclose($handle); $xml=simplexml_load_string($xmlbrut); if(!$xml) die('Erreur lecture fichier XML'); //parcours des objets foreach ($xml->enregistrement as $item) { $tableauRetour[$index] = $item->$nom_champ; $index = $index + 1 ; } return($tableauRetour); }
Mille Mercis !
Partager