Requête sur un flux xml?

Nouveau WRInaute
Bonsoir, ma question est certainement très bête mais j'avoue ma totale "novicitude"!

j'ai un flux xml qui ressemble à ça (Les connaisseurs reconnaitront l'origine! ;) )

Code:
<?xml version="1.0" encoding="UTF-8" ?>
<profil>
	<item>
		<id>5286774</id>
		<login>XXXXX</login>
		<sexe>Un homme</sexe>
		<age>26</age>
		<yeux>Vert</yeux>
		<cheveux>Brun</cheveux>
		<pays>France</pays>
		<region>Pays de la Loire</region>
		<departement>44</departement>
		<nom_departement>Loire Atlantique</nom_departement>
		<ville>Nantes</ville>
		<description>bla bla bal</description>
		<webcam>no</webcam>
	</item>

Pour afficher ce flux j'utilise ceci

Code:
<?php 
$file = "XXX.com/flux/XML.php?sexe=0&age_max=25&pays=fr";
$flux_xml = implode("", @file($file));

eregi("<item>(.*)</item>",$flux_xml,$rawresults);
$results = explode("<item",$rawresults[0]);
$max = count($results)-1;

for($i=0;$i<$max;$i++){
    eregi("<login>(.*)</login>",$results[$i+1], $login);
    eregi("<id>(.*)</id>",$results[$i+1], $id);
    eregi("<photo>(.*)</photo>",$results[$i+1], $photo);
    eregi("<sexe>(.*)</sexe>",$results[$i+1], $sexe);
    eregi("<age>(.*)</age>",$results[$i+1], $age);
    eregi("<yeux>(.*)</yeux>",$results[$i+1], $yeux);
    eregi("<cheveux>(.*)</cheveux>",$results[$i+1], $cheveux);
    eregi("<departement>(.*)</departement>",$results[$i+1], $departement);

    echo "<img src=\"XXX.com/".$photo[1]."\" alt=\"photo de ".$login[1]."\" /><br />";
    echo "login : ".$login[1]."<br />\n";
    echo "sexe : ".$sexe[1]."<br />\n";
    echo "age : ".$age[1]."<br />\n";
    echo "yeux : ".$yeux[1]."<br />\n";
    echo "cheveux : ".$cheveux[1]."<br />\n";
    echo "département : ".$departement[1]."<br />\n";
    echo "<a href=\"XXX/u_page.php?id=1248445\">Voir le profil</a><br /><br />\n\n";

}
?>

Et ma question est: Puis-je effectuer une requête sur ce flux XML afin de n'afficher que les entités dont la balise <nom_departement> est par exemple "Normandie"?

Merci d'avance ;)
 
Nouveau WRInaute
Je pensais avoir compris le principe des conditions, cependant il n'en est rien :oops:

Est-ce juste une nouvelle variable à créer? Cela a t-il quelques chose a voir avec le XSL? J'ai cherché des exemples de "requête" sur du XML mais je n'ai rien trouvé? Est-ce a base de if/else?

Si une bonne âme voulait bien me donner un nouvel indice !!!
 
WRInaute passionné
tu peut ajouter le test autour des "echo" :
Code:
<?php
$file = "XXX.com/flux/XML.php?sexe=0&age_max=25&pays=fr";
$flux_xml = implode("", @file($file));

eregi("<item>(.*)</item>",$flux_xml,$rawresults);
$results = explode("<item",$rawresults[0]);
$max = count($results)-1;

for($i=0;$i<$max;$i++){
    eregi("<login>(.*)</login>",$results[$i+1], $login);
    eregi("<id>(.*)</id>",$results[$i+1], $id);
    eregi("<photo>(.*)</photo>",$results[$i+1], $photo);
    eregi("<sexe>(.*)</sexe>",$results[$i+1], $sexe);
    eregi("<age>(.*)</age>",$results[$i+1], $age);
    eregi("<yeux>(.*)</yeux>",$results[$i+1], $yeux);
    eregi("<cheveux>(.*)</cheveux>",$results[$i+1], $cheveux);
    eregi("<departement>(.*)</departement>",$results[$i+1], $departement);

if ($departement[1] == "Normandie") {
    echo "<img src=\"XXX.com/".$photo[1]."\" alt=\"photo de ".$login[1]."\" /><br />";
    echo "login : ".$login[1]."<br />\n";
    echo "sexe : ".$sexe[1]."<br />\n";
    echo "age : ".$age[1]."<br />\n";
    echo "yeux : ".$yeux[1]."<br />\n";
    echo "cheveux : ".$cheveux[1]."<br />\n";
    echo "département : ".$departement[1]."<br />\n";
    echo "<a href=\"XXX/u_page.php?id=1248445\">Voir le profil</a><br /><br />\n\n";
}

}
?>
 
WRInaute passionné
Oui voilà, y'a des classes pour manipuler du XML, via du xpath (langage de requête pour le XML) ou autre.
 
Nouveau WRInaute
Bacteries a dit:
Oui voilà, y'a des classes pour manipuler du XML, via du xpath (langage de requête pour le XML) ou autre.

Oui j'ai parcouru la doc xpath mais j'avoue ne rien n'y comprendre. Cependant il faudra bien que je m'y mette afin d'exploiter pleinement les possibilités offertes par le xml. Cependant mes connaissances sont maigres tant en php qu'en xml. Il faut que je reprenne tout depuis le début :cry: Néanmois, je remercie webmasterlamogere pour la solution qu'il m'a donnée et qui semble fonctionner.

J'en profite pour soulever un autre problème que je rencontre avec ce flux. Il contient des balises description qui incluent parfois des caractères spéciaux. Le contenu est dans ce cas entouré par des <![CDATA[ et il n'apparait pas.

A quoi cela est-il dû?
 
Nouveau WRInaute
webmasterlamogere a dit:
<![CDATA[ .. ]]> permet de mettre du texte brut à l'intérieur sans avoir à le modifier avec des &eacute; par exemple

Merci webmasterlamogere Je vais abuser encore un peu (au point ou j'en suis...) comment faire pour que ce texte soit affiché? Est-ce une question d'encodage des caractères? Car quand je parse le flux, il n'y a que les descriptions sans CDATA qui s'affiche?

Merci d'avance ;)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut