Récupération de texte entre des balises - PHP

Résolu
tsh9 Messages postés 3 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 15 août 2010 - 14 août 2010 à 01:38
tsh9 Messages postés 3 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 15 août 2010 - 14 août 2010 à 14:42
Bonjour,

j'aimerais récupérer tout le texte entre les balises <City>Texte</City> d'un fichier XML.
Malheureusement je ne maîtrises pas les expressions régulières, donc j'imagine que le problème vient de la.

J'obtiens trois fois la première occurence (Oliphant Ont Oliphant Ont Oliphant Ont), ce que j'aimerais c'est (Oliphant Ont - Daniel's Harbour, Nfld - Badger, Nfld)

En résumé j'aimerais extraire dans un tableau toute les villes entres les balises <City></City>.
Toute aide serait grandement apprécier!

Merci.

print '<select name="villes">';

$pattern = '/<\/Country>\s*(<City>)([^<]+)/i';
$subject = '<Country>Canada</Country> <City>Oliphant Ont</City> </Table> <Country>Canada</Country> <City>Daniel\'s Harbour, Nfld</City>
<Country>Canada</Country> <City>Badger, Nfld</City>
<Table> ';
preg_match($pattern, $subject, $matches);

for($i=0; $i< count($matches); $i++) {
print "<option value =".$matches[2].">".$matches[2]."</option>";
}

print '</select>';

?>

3 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
14 août 2010 à 13:34
Salut,

... et puis s'il s'agit d'un fichier ou d'une string XML sans doute est il plus simple et plus flexible d'utiliser les fonctions PHP natives (DomDocument, ...)

Cordialement,


Kohntark -
3
genetApt151 Messages postés 30 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 2 avril 2011 1
14 août 2010 à 13:23
Salut,

Il faut utiliser preg_match_all(), preg_match() s'arrête à la première valeur matché. Aussi dans la boucle for tu écris toujours la même valeur $matches[2].

function lireBalises($text, $tag) 
{
  $pattern = '#<'.$tag.'([^>]*)>(.+)</'.$tag.'>#isU';
  preg_match_all($pattern,$text,$matches);
 			
  return $matches[2];
}

$subject = '<Country>Canada</Country> <City>Oliphant Ont</City> </Table> <Country>Canada</Country> <City>Daniel\'s Harbour, Nfld</City>
 <Country>Canada</Country> <City>Badger, Nfld</City>
 <Table> ';
$villes = lireBalises($subject,"city");

echo '<select name="villes">';
foreach($villes as $ville)
{ 
  $ville = trim($ville);
  if(!empty($ville))
    echo "<option value =".$ville.">".$ville."</option>";
}
echo '</select>';
1
tsh9 Messages postés 3 Date d'inscription samedi 8 août 2009 Statut Membre Dernière intervention 15 août 2010
14 août 2010 à 14:42
Bonjour,

Je vous remercie énormément d'avoir répondu à ma question. Le découragement commençais à prendre le dessus.

Encore une fois, mille mercis!

tsh9
0
Rejoignez-nous