Récupération de texte entre des balises - PHP [Résolu]

Signaler
Messages postés
3
Date d'inscription
samedi 8 août 2009
Statut
Membre
Dernière intervention
15 août 2010
-
Messages postés
3
Date d'inscription
samedi 8 août 2009
Statut
Membre
Dernière intervention
15 août 2010
-
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

Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
30
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
2 avril 2011
1
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>';
Messages postés
3
Date d'inscription
samedi 8 août 2009
Statut
Membre
Dernière intervention
15 août 2010

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