Parser du XML : fonction basique

Mammouth du PHP | 531 Messages

28 févr. 2010, 14:05

Bonjour,

Je sais qu'il existe dom ou simpleXml pour ça, mais j'avais envie de faire ma propre petite fonction permettant de retourner le contenu d'un fichier XML dans un tableau.
Ça peut paraitre un peu du bricolage, mais cette fonction ne servira qu'a lire des documents léger, pas des grosses bibliothèques.

Je voulais juste savoir si au niveau des performances ça ne serait pas minable avec l'utilisation des regex. je rappelle c'est important que je ne l'utiliserais pour lire de petits documents de quelques ko seulement...
<?php
function xml_vers_array($fichier, $item, $elements){
	$xml = file_get_contents($fichier);
	preg_match_all('#<'.$item.'>(.*)</'.$item.'>#Usi', $xml, $temp);
	$i = 0;
	foreach($temp[1] as $temp2){
		foreach($elements as $element){
			preg_match_all('#<'.$element.'>(.*)</'.$element.'>#Usi', $temp2, $temp3);
			$temp4[$i][$element] = $temp3[1][0];
		}
		$i++;
	}
	return $temp4;
}

$data = xml_vers_array('test.xml', 'item', array('element1', 'element2'));
print_r($data);
?>
Voici ce que donne le print_r() :

Code : Tout sélectionner

Array ( [0] => Array ( [element1] => 1 [element2] => Test 1 ) [1] => Array ( [element1] => 2 [element2] => Test 2 ) )
La source XML :

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1" ?> <liste> <item> <element1>1</element1> <element2>Test 1</element2> </item> <item> <element1>2</element1> <element2>Test 2</element2> </item> </liste>

ViPHP
ViPHP | 1136 Messages

01 mars 2010, 08:53

Slt ,

Si ta fonction fonctionne , pour des petits fichiers tu ne devrais pas voir la différence ...
Apres reste aussi à voir le nombre de petits fichiers à lire en une fois .

Cependant , ne pas utiliser SimpleXml pour ce genre d'opération me semble un peu du gachi , cette extension étant en standard et éprouvé depuis pas mal de temps maintenant .

Bonne continuation,
Ch.

Mammouth du PHP | 531 Messages

07 mars 2010, 23:33

Merci pour ta réponse.

Après quelques test de temps de lecture ça me semble suffisamment rapide, du moins pour l'utilisation que j'en fait

Eléphant du PHP | 453 Messages

08 mars 2010, 06:10

et l'eau
Slt ,

Si ta fonction fonctionne , pour des petits fichiers tu ne devrais pas voir la différence ...
Apres reste aussi à voir le nombre de petits fichiers à lire en une fois .

Cependant , ne pas utiliser SimpleXml pour ce genre d'opération me semble un peu du gachi , cette extension étant en standard et éprouvé depuis pas mal de temps maintenant .

Bonne continuation,
Ch.
+1. Je suis vraiment de ton avis stopher. En deux lignes de codes on arrive au but et surement plus rapide qu'une fonction « perso » avec RegEx vu que c'est du natif (en C si je ne m'abuse). Et pour finir, pourquoi réinventer l'eau chaude. Erf la roue c'est pompeux :p . En plus simplexml, c'est vraiment simple. je ne me souviens pas toujours comment fonctionne. Il suffit de regarder la doc et de suite ça revient. Bizarre j'arrive pas à imprimer ce truc dans mon HD interne. Alzheimer me guette 8-| .
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

ViPHP
ViPHP | 5462 Messages

08 mars 2010, 12:27

il avait envie de faire son truc, je trouve que c'est un bon exercice :D