Bonjour,
Décidément, moi et les regex...:mouarf:
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 :
A l'aide du code PHP suivant, je tente de récupérer les contenus des balises :Code:
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>';
Ici, je récupère correctement le contenu de la balise ETAGE, dans le XML. :ccool:Code:
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');
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 :
... car il y a de nombreux "BIENS" dans ce XML, et je souhaiterais les traiter un par un.Code:
1
2 $contenu = xmlGetContenuNoeud($monXML,'BIEN');
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. ;)
