Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2007, 10h20   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 109
Points : 11
Points : 11
Par défaut [SimpleXML] besoin d'aide sur une expression xpath

bonjour,
voici mon bout xml que je parsse a l’aide de simplexml :

Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <produit>
    <nom_fournisseur>nom du fournisseur</nom_fournisseur>
    <nom_produit>nom du produit</nom_produit>
    <id_produit>id produit</id_produit>
    <url_produit>url de produit</url_produit>
    <img_produit>url d'image de produit</img_produit>
    <pays_dest>pays destination</pays_dest>
    <ville_dest>ville destination</ville_dest>
    <prix>
      <unprix>
        <ville_dep>paris</ville_dep>
        <date_dep>date depart</date_dep>
        <prix_produit>prix</prix_produit>
      </unprix>
      <unprix>
        <ville_dep>lyon</ville_dep>
        <date_dep>date de depart 2</date_dep>
        <prix_produit>prix2</prix_produit>
      </unprix>
 
    </prix>
  </produit>
   .....
je voudrais afficher la ville de départ ainsi que sa date de départ (le choix de la ville est dynamique). J essayer ça :
Code :
$produits = $document->xpath(utf8_encode("//produit[prix/unprix/ville_dep='$ville_dep'"));
avec $ville_dep=Lyon par exemple.
Le hic est quand je fait ca :
Code :
1
2
3
4
foreach ($produits as $produit) 
{  
 echo 'depart : '.$ date_dep.' de : '.ucfirst($vdep);
}
l’affichage est la première ville (dans mon cas paris) et non la ville voulu (Lyon) !?
comment faire pour afficher que la ville voulu?
ANISSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 10h30   #2
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Salut,

pourquoi pas tout simplement:

Code :
$result = $xml->xpath('/produit/prix/unprix/ville_dep');
Cordialement.
  Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 10h45   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 109
Points : 11
Points : 11
cette expression va me selectionner tous les villes de depart, donc j pa un controle sur celle voulu
ANISSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 11h03   #4
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
et ca ?

Code :
1
2
3
4
foreach ($xml->xpath('/produit/prix/unprix/') as $unprix) {
      if($unprix->ville_dep == $ville_dep)
         echo $unprix->date_dep." ".$unprix->ville_dep;
}
  Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 11h13   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 109
Points : 11
Points : 11
le problème c'est que je dois le faire dans la même expression xpath, car j'ai besoin de connaître le nombre total pour la pagination :
Code :
$produits = $document->xpath(utf8_encode("//produit[prix/unprix/ville_dep='$ville_depa'][position()>=$debut_pos and position()<$fin_pos]"));
ANISSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 11h18   #6
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
expose ton problème en une fois alors lol.
  Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 11h23   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 109
Points : 11
Points : 11
ba desolé,je m'explique:
je dispose de l'xml cité auparavant, est qui enorme,(de point de vue de taille et nombre de produit) je voudrais afficher certaines villes depart avec leur date de deaprt (le choix de la ville est dynamique).
toute en gardant un affichage de 10 produits par page, mon probleme c que je coince lors de l'affichage de la ville voulu.
j'espere que j'été clair
ANISSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 19h15   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il faut comprendre vos expressions XPath :
Code :
//produit[prix/unprix/ville_dep='X']
Sélectionner tous les produits dont au moins d'une des villes de départ est X.

L'erreur est dans votre raisonnement, il est normal que vous atteigniez la première ville si vous procédez de la sorte :
$date_dep = $produit->prix->unprix->date_dep;
$vdep = $produit->prix->unprix->ville_dep;
Il faudrait en revanche reparcourir les noeuds unprix soit avec une boucle soit avec une expression XPath :
Code :
1
2
3
4
5
6
7
8
9
foreach ($produits as $produit) {
    # ...
    foreach ($produit->prix->unprix as $unprix) {
        if ($unprix->ville_dep == $ville_depa) {
            echo 'depart : ' . $unprix->date_dep . ' de : '.ucfirst($unprix->ville_dep);
        }
    }
    # ...
}
Comme l'avais justement proposé Fabouney.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 10h23   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 109
Points : 11
Points : 11
merci pour votre aide ça marcher
ANISSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h31.


 
 
 
 
Partenaires

Hébergement Web