Requête sur un flux xml?

cuirwebmaster
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 29
Inscription: 4 Mai 2007

Requête sur un flux xml?

Message le Mer Mai 14, 2008 21:24

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: Tout sélectionner
<?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: Tout sélectionner
<?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 ;)

audit.referencement
WRInaute discret
WRInaute discret
 
Messages: 125
Inscription: 16 Fév 2008

Message le Jeu Mai 15, 2008 0:57

Lol, j'ai reconnu l'origine, effectivement.

Aucun problème pour ce que tu souhaites faire, une simple condition suffit.

cuirwebmaster
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 29
Inscription: 4 Mai 2007

Message le Jeu Mai 15, 2008 2:09

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


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Jeu Mai 15, 2008 6:35

tu peut ajouter le test autour des "echo" :
Code: Tout sélectionner
<?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";
}

}
?>


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 4146
Inscription: 27 Déc 2004

Message le Jeu Mai 15, 2008 9:13

il y a des classe pour manipuler le xml qui existent et open source


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Jeu Mai 15, 2008 9:29

Oui voilà, y'a des classes pour manipuler du XML, via du xpath (langage de requête pour le XML) ou autre.

cuirwebmaster
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 29
Inscription: 4 Mai 2007

Message le Jeu Mai 15, 2008 9:45

Bacteries a écrit: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û?


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Jeu Mai 15, 2008 10:19

<![CDATA[ .. ]]> permet de mettre du texte brut à l'intérieur sans avoir à le modifier avec des &eacute; par exemple

cuirwebmaster
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 29
Inscription: 4 Mai 2007

Message le Jeu Mai 15, 2008 10:55

webmasterlamogere a écrit:<![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 ;)


webmasterlamogere
WRInaute passionné
WRInaute passionné
 
Messages: 1874
Inscription: 17 Déc 2006

Message le Jeu Mai 15, 2008 11:03

utilise un parser xml : il récupère que le texte et s'occupe de mettre le texte au bon format.
http://fr.php.net/xml

cuirwebmaster
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 29
Inscription: 4 Mai 2007

Message le Jeu Mai 15, 2008 11:08

webmasterlamogere a écrit:utilise un parser xml : il récupère que le texte et s'occupe de mettre le texte au bon format.
http://fr.php.net/xml


Ok merci!


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités