IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Expression Xpath Et Simplexml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 109
    Points : 39
    Points
    39
    Par défaut [SimpleXML] Expression Xpath Et Simplexml
    bonjour,
    je suis en train de parser un fichier xml avec simplexml est voici la structure de ficher:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <annonce>
      <famille><![CDATA[Auto/moto]]></famille>
     	<id_annonceur><![CDATA[reference_annonceur]]></id_annonceur>
    	<etat> <![CDATA[old]]></etat>
    	<marque> <![CDATA[Marcedes]]></marque>
    	<model> <![CDATA[TDI 250]]></model>
    	<carosserie> <![CDATA[break]]></carosserie>
    	<descriptif> <![CDATA[Voiture de reves, en bonne etat global]]></descriptif>
    	<couleur> <![CDATA[gris metalique]]></couleur>
    	<image_p> <![CDATA[reference_p.jpeg]]></image_p>
    	<image_g> <![CDATA[ref.jpeg]]></image_g>
    	<url> <![CDATA[detail.php?id=reference]]></url>
    	<année> <![CDATA[2000]]></année>
    	<prix> <![CDATA[5000]]></prix>
    	<kilometrage> <![CDATA[10.000]]></kilometrage>
    	<energie> <![CDATA[essence]]></energie>
    	<pays> <![CDATA[pays]]> </pays>
    	<ville> <![CDATA[ville]]></ville>
    	<date_debut> <![CDATA[12/04/2007]]></date_debut>
    	<date_fin> <![CDATA[12/08/2007]]></date_fin>
    	</annonce>
    	<annonce>
    .......

    je vau afficher les 10 premiers noeuds un premier page php puis les 10 autres dans un deuxieme page est ainsi de suite
    j'ai essyer ca :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $article = simplexml_load_file('xml.xml');
    for($i=0;$i<10;$i++)
    {
    	foreach($article->annonce as $annonce)
            { 
    	  <td> echo ($annonce->marque));    </td>
    	  <td> echo ($annonce->model));      </td>
    	  <td> echo ($annonce->carosserie); </td>
    	  <td> echo ($annonce->descriptif);  </td>
    	  <td> echo ($annonce->image_p);   </td>
          }
    }
    mais envin.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Avec un peu de XPath (requiert une version 5.2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    define('NB_PAR_PAGE', 10);
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
     
    $article = simplexml_load_file('pagination_simplexml.xml');
    $count = count($article->xpath('//annonce'));
     
    if ($count > 0) {
        $debut_pos = ($page - 1) * NB_PAR_PAGE + 1;
        $fin_pos = $page * NB_PAR_PAGE + 1;
        $derniere_page = ceil($count / NB_PAR_PAGE);
        $annonces = $article->xpath("//annonce[position()>=$debut_pos and position()<$fin_pos]");
     
        foreach ($annonces as $annonce) {
            echo (string) $annonce->model . '<br/>';
        }
        if ($page > 1) {
            echo '<a href="' . basename(__FILE__) . '?page=' . ($page - 1) . '">Page précédente</a>';
        }
        for ($i = 1; $i <= $derniere_page; $i++) {
            if ($i == $page) {
                echo '<b>' . $i . '</b>';
            } else {
                echo '<a href="' . basename(__FILE__) . '?page=' . $i . '">' . $i . '</a>';
            }
        }
        if ($page < $derniere_page) {
            echo '<a href="' . basename(__FILE__) . '?page=' . ($page + 1) . '">Page suivante</a>';
        }
    }
    ?>
    Le problème c'est que SimpleXML ne gère pas les expressions du style count(//annonce) et que vous devez savoir combien vous avez de noeuds pour générer les liens Suivant/Précédent. Sinon on pourrait toutes les parcourir dans un foreach ou while et ajouter des tests dans cette boucle ...

Discussions similaires

  1. SimpleXML avec XPATH pour une requete simple en apparence
    Par NissqR dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 23/03/2010, 11h09
  2. simplexml et xpath XML
    Par polyvan dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2009, 12h11
  3. [SimpleXML] besoin d'aide sur une expression xpath
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 11/05/2007, 11h23
  4. [SimpleXML] Est-il possible d'utiliser des expressions XPATH 2.0 avec simplexml ?
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/11/2006, 10h14
  5. [XPath][SimpleXML] probleme avec simplexml et xpath
    Par ANISSS dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2006, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo