Bonjour,

Décidément, moi et les regex...

Je dispose sur serveur d'un vieux PHP 4 sans l'extension domxml, et je n'ai pas la main sur la configuration. J'essaie donc de récupérer les contenus des noeuds d'un fichier XML via expressions régulières, et un preg_match_all().

Supposons le XML suivant, dans une variable PHP :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$monXML = '<BIEN>
<NB_PIECES>1</NB_PIECES>
<SURF_HAB>25,5</SURF_HAB>
<SURF_SEJOUR>23</SURF_SEJOUR>
<SURF_TERRAIN>0</SURF_TERRAIN>
<ETAGE>2</ETAGE>
</BIEN>';
A l'aide du code PHP suivant, je tente de récupérer les contenus des balises :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
function xmlGetContenuNoeud($leXml,$nomNoeud)
{
	$pattern = '/\<'.$nomNoeud.'\>(.*)\<\/'.$nomNoeud.'\>/i';	
	$count = preg_match_all($pattern,$leXml,$out);	
	return($out);
}
 
$contenu = xmlGetContenuNoeud($monXML,'ETAGE');
Ici, je récupère correctement le contenu de la balise ETAGE, dans le XML.

Mais là où ça ne fonctionne plus, c'est quand je cherche à récupérer le contenu complet contenu entre <BIEN> et </BIENS>, en appliquant le même code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$contenu = xmlGetContenuNoeud($monXML,'BIEN');
... car il y a de nombreux "BIENS" dans ce XML, et je souhaiterais les traiter un par un.
Là, ça ne me retourne plus rien.

J'ignore pourquoi : est-ce parce que cette balise, contrairement aux autres, va à la ligne après son ouverture ? Dois-je améliorer ma Regex ?....

Merci à vous si vous avez quelques pistes.