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] requête sur un fichier xml


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 109
    Par défaut [SimpleXML] requête sur un fichier xml
    bonjour,
    je suis en train de parsser un xml avec simplexml de la forme:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <root>
     <voiture>
      <marque>vw</marque>
      <carburation>diesel</carburation>
      <couleur>rouge</couleur>
      <etat>neuf</etat>
     </voiture>
    ......
    </root>

    le hic est que le fichier xml est trop volumineux,et je veut l'afficher en html avec une pagination de 10 noeud par page tout en introduisant certain caractere qui sont passer en parametre : par exemple je veu afficher les voitures de couleur rouge.
    j essayer cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        $document = simplexml_load_file('monxml.xml');
        $produits = $document->xpath(utf8_encode("//voiture[couleur='rouge']"));
     
      foreach ($produits as $produit) {
    						echo utf8_decode((string)$produit->marque);
    						echo utf8_decode((string)$produit->carburation);	
    						echo utf8_decode((string)$produit->etat);
     
    				}
    mais cette boucle m'affiche tous les articles (dans le meme page) avec le critere choisi sans pagination. Comment doit je proceder?

  2. #2
    Membre expérimenté

    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
    Par défaut
    Pour la pagination soit vous ajoutez des tests supplémentaires dans votre expression XPath sur la position (fonction position(), voir ce sujet) ou alors vous ajoutez des tests dans la boucle de sorte à sauter les N premières voitures puis à parcourir les X voitures qui vous intéressent et enfin vous arrêtez la boucle (mot clé break : inutile de parcourir le reste).

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 109
    Par défaut
    j essayer cette expression de xpath:
    $article->xpath("//voiture[position()>=5 and position()<15 and //voiture[couleur='rouge']")
    mai ca rien donner!!!

  4. #4
    Membre expérimenté

    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
    Par défaut
    Votre expression XPath n'est pas correcte :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    //voiture[couleur='rouge' and position()>=5 and position()<15]

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 109
    Par défaut
    j'ai modifié mon xml sous cette structure:

    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
    23
    24
    25
    26
    27
    28
      <produit>
        <nom_fournisseur>nom du fournisseur</nom_fournisseur>
        <nom_produit>nom du produit</nom_produit>
        <id_produit>id produit</id_produit>
        <accroche>description du produit</accroche>
        <theme_produit>theme du produit</theme_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>
        <jours>noimbre de jours</jours>
        <nuits>nombre de nuits</nuits>
        <repas>le repas</repas>
        <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 veu afficher tous les produits qui ont comme ville de depart paris par exemple, tout en gardant une pagination de 10 produits par page?

    comment faire?
    j 'essayer ca :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    define('NB_PAR_PAGE', 10); 
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;   
    $document = simplexml_load_file('monxml.xml'); 
    $count = count($document->xpath("//produit/prix/unprix/ville_dep='paris'")); 
     
    $debut_pos = ($page - 1) * NB_PAR_PAGE; 
    $fin_pos = $page * NB_PAR_PAGE; $derniere_page = ceil($count / NB_PAR_PAGE);
     
    $produits= $document->xpath(utf8_encode("//produit[position()>=$debut_pos and position()<$fin_pos]/prix/unprix/ville_dep='paris'"));
     
    	if ($produits && count($produits) > 0) {
             foreach ($produits as $produit) {
    $nomp=utf8_decode((string)$produit->nom_produit);
    $pays=utf8_decode((string)$produit->pays_dest);					$ville=utf8_decode((string)$produit->ville_dest);
    $dep=utf8_decode((string)$produit->prix->unprix->date_dep);
    $desc=utf8_decode((string)$produit->accroche);
    $img=utf8_decode((string)$produit->img_produit);
    $pri=utf8_decode((string)$produit->prix->unprix->prix);
    $url=utf8_decode((string)$produit->url_produit);
     
     
    echo '<table width="90%" border="0" align="center">
    					   <tr> 
                            <td rowspan="4" width="100"><img src="'.$img.'" width="90" height="70"></td>
        					<td width="500">'.$nomp.'   '.$pays.'('.$ville.')</td>
                            <td rowspan="4" align="center"><img src="'.$lien.'" border="0" width="80"></td>
                            <td rowspan="4">'.$pri.'</td>
       					    <td rowspan="4" width="70" align="right"><a href="'.$url.'"><img src="voir_offre.jpg" border="0"></a></td>
    				       </tr>
    				       <tr> 
                            <td width="500" align="left"><div align="justify">'.$desc.'</div></td>
    				       </tr>
    				       <tr> 
                            <td>depart : '.$dep.'</td>
    				      </tr>
    				</table>
    				';
    	      } 
    echo '<table align="center">
    		<tr>
    		  <td>';
     
    if ($page > 1) {  
                    echo '<a href="' . basename(__FILE__) . '?page=' . ($page - 1) . '" class="bleudetails2"> << pr&eacute;c&eacute;dente </a>'; 
                   } 
    for ($i = 1; $i <= $derniere_page; $i++) {  
    							if ($i == $page) {  echo '<a class="bleudetails2" >' . $i . '</a>'; } 
    							else {  echo '<a href="' . basename(__FILE__) . '?page=' . $i . '" class="bleudetails2"> ' . $i . ' </a>'; 							     }  
    								 }  if ($page < $derniere_page) {  echo '<a href="' . basename(__FILE__) . '?page=' . ($page + 1) . '" class="bleudetails2">  suivante >> </a>'; 
    								                              } } 
    echo'</td>
         </tr>
       </table>';
     
    ?>

  6. #6
    Membre expérimenté

    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
    Par défaut
    Les expressions XPath n'étaient pas correctes (voilà votre code remis en forme ) :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    define('NB_PAR_PAGE', 10); 
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;   
    $document = simplexml_load_file('produits.xml'); 
    $count = count($document->xpath("//produit[prix/unprix/ville_dep='paris']")); 
     
    $debut_pos = ($page - 1) * NB_PAR_PAGE + 1; 
    $fin_pos = $page * NB_PAR_PAGE + 1;
    $derniere_page = ceil($count / NB_PAR_PAGE);
     
    if ($count > 0) {
        $produits = $document->xpath(utf8_encode("//produit[position()>=$debut_pos and position()<$fin_pos and prix/unprix/ville_dep='paris']"));
        foreach ($produits as $produit) {
            $nomp = utf8_decode((string) $produit->nom_produit);
            $pays = utf8_decode((string) $produit->pays_dest);
            $ville = utf8_decode((string) $produit->ville_dest);
            $dep = utf8_decode((string) $produit->prix->unprix->date_dep);
            $desc = utf8_decode((string) $produit->accroche);
            $img = utf8_decode((string) $produit->img_produit);
            $pri = utf8_decode((string) $produit->prix->unprix->prix);
            $url = utf8_decode((string) $produit->url_produit);
            $lien = ''; // Variable indéfinie sans
     
            echo '<table width="90%" border="0" align="center">
                <tr> 
                    <td rowspan="4" width="100"><img src="'.$img.'" width="90" height="70"></td>
                    <td width="500">'.$nomp.'   '.$pays.'('.$ville.')</td>
                    <td rowspan="4" align="center"><img src="'.$lien.'" border="0" width="80"></td>
                    <td rowspan="4">'.$pri.'</td>
                    <td rowspan="4" width="70" align="right"><a href="'.$url.'"><img src="voir_offre.jpg" border="0"></a></td>
                </tr>
                <tr> 
                    <td width="500" align="left"><div align="justify">'.$desc.'</div></td>
                </tr>
                <tr> 
                    <td>depart : '.$dep.'</td>
                </tr>
            </table>';
        }
        echo '<table align="center">
            <tr>
                <td>';
     
        if ($page > 1) {  
            echo '<a href="' . basename(__FILE__) . '?page=' . ($page - 1) . '" class="bleudetails2"> << pr&eacute;c&eacute;dente </a>'; 
        } 
        for ($i = 1; $i <= $derniere_page; $i++) {  
            if ($i == $page) {
                echo '<a class="bleudetails2" >' . $i . '</a>';
            } else {
                echo '<a href="' . basename(__FILE__) . '?page=' . $i . '" class="bleudetails2"> ' . $i . ' </a>';
            }  
        }
        if ($page < $derniere_page) {
            echo '<a href="' . basename(__FILE__) . '?page=' . ($page + 1) . '" class="bleudetails2">  suivante >> </a>'; 
        }
        echo '</td>
            </tr>
        </table>';
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] [Débutant(e)] écrire sur un fichier XML à partir de java
    Par Samanta dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 05/02/2008, 11h13
  2. [SimpleXML] Fermeture d'un fichier XML
    Par FlyByck dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 12/01/2006, 15h10
  3. Réponses: 5
    Dernier message: 22/07/2005, 23h40
  4. [crystal 10] declenchement etat sur arrivée fichier XML
    Par cchatelain dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/05/2005, 12h59
  5. Requete sur des fichiers XML
    Par buildit dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/05/2005, 10h57

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