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

Messages postés
3
Date d'inscription
samedi 8 août 2009
Dernière intervention
15 août 2010
- - Dernière réponse : tsh9
Messages postés
3
Date d'inscription
samedi 8 août 2009
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>';

?>
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Dernière intervention
27 avril 2012
3
Merci
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 -

Merci kohntark 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de kohntark
Messages postés
30
Date d'inscription
lundi 7 mai 2007
Dernière intervention
2 avril 2011
1
Merci
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>';
Commenter la réponse de genetApt151
Messages postés
3
Date d'inscription
samedi 8 août 2009
Dernière intervention
15 août 2010
0
Merci
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
Commenter la réponse de tsh9

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.