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 14/04/2007, 15h20   #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] Expression Xpath Et Simplexml

bonjour,
je suis en train de parser un fichier xml avec simplexml est voici la structure de ficher:

Code XML :
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 :
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.
ANISSS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2007, 20h07   #2
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
Avec un peu de XPath (requiert une version 5.2) :
Code :
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 ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h37.


 
 
 
 
Partenaires

Hébergement Web