Requête sur un flux xml?

 
cuirwebmaster
Nouveau WRInaute
 
Messages: 28
Inscription: Ven Mai 04, 2007 5:26

Requête sur un flux xml?

Message le Mer Mai 14, 2008 22: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 ;)

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

audit.referencement
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 123
Inscription: Sam Fév 16, 2008 18:14

Message le Jeu Mai 15, 2008 1:57

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

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

cuirwebmaster
Nouveau WRInaute
 
Messages: 28
Inscription: Ven Mai 04, 2007 5:26

Message le Jeu Mai 15, 2008 3: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 accro
WRInaute accro
 
Messages: 1873
Inscription: Dim Déc 17, 2006 22:08

Message le Jeu Mai 15, 2008 7: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: 2494
Inscription: Lun Déc 27, 2004 17:29

Message le Jeu Mai 15, 2008 10:13

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


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1267
Inscription: Jeu Mai 27, 2004 14:04

Message le Jeu Mai 15, 2008 10: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
 
Messages: 28
Inscription: Ven Mai 04, 2007 5:26

Message le Jeu Mai 15, 2008 10: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 accro
WRInaute accro
 
Messages: 1873
Inscription: Dim Déc 17, 2006 22:08

Message le Jeu Mai 15, 2008 11:19

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

cuirwebmaster
Nouveau WRInaute
 
Messages: 28
Inscription: Ven Mai 04, 2007 5:26

Message le Jeu Mai 15, 2008 11: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 accro
WRInaute accro
 
Messages: 1873
Inscription: Dim Déc 17, 2006 22:08

Message le Jeu Mai 15, 2008 12: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
 
Messages: 28
Inscription: Ven Mai 04, 2007 5:26

Message le Jeu Mai 15, 2008 12: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!

 

Modérateurs: WebRankInfo, e-kiwi, OTP, fandecine, Patrice A.

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

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