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
3706
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