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 23/04/2007, 23h58   #1
Invité régulier
 
Inscription : avril 2006
Messages : 33
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 33
Points : 8
Points : 8
Par défaut [SimpleXML] Parser en commencant par la fin

Bonsoir à tous

j'utilise Simplexml pour parser un fichier xml
mais voilà au moment de parcourir les items de cette façon :
Code :
1
2
3
foreach($xml->channel->item as $item) {
...
}
j'aurais besoin de commencer par la fin du fichier ...
vous auriez une idée ?
Cartouche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 00h11   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Jette un oeil là dessus : http://php.net/array_reverse
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 00h22   #3
Invité régulier
 
Inscription : avril 2006
Messages : 33
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 33
Points : 8
Points : 8
Merci de ta réponse
mais le problème est que le fichier est manipulé comme un objet de type SimpleXMLElement, et non pas comme un tableau
Cartouche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 00h34   #4
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Tu as essayé ?
Code :
1
2
3
$items = array_reverse($xml->channel->item->children());
foreach ($items as $item) {
}
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 00h47   #5
Invité régulier
 
Inscription : avril 2006
Messages : 33
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 33
Points : 8
Points : 8
Je viens d'essayer, j'obtiens l'erreur
Code :
The argument should be an array
à la ligne où j'écris
Code :
$inv = array_reverse( $xml->channel->item->children() );
children() ne renverrait donc pas un tableau ..
Cartouche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 00h50   #6
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
quel est la structure de ton xml ?
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 00h52   #7
Invité régulier
 
Inscription : avril 2006
Messages : 33
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 33
Points : 8
Points : 8
Il s'agit d'un flux rss, pour la version :
Code :
<?xml version="1.0" encoding="iso-8859-1"?>
Cartouche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 01h12   #8
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Le problem venait de spl qui fait que channel->item est soit l'ensemble des éléments item de channel (donc un tableau) soit le premier élément item de channel (donc un objet).
Il faut donc ruser et passer par xpath :
Code php :
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
<?php
$string = <<<XML
<?xml version='1.0'?>
<rss>
   <channel>
        <item>
                <title>1</title>
        </item>
        <item>
                <title>2</title>
        </item>
  </channel>
</rss>
XML;
$xml = simplexml_load_string($string);
 
echo "Dans l'ordre : ";
foreach($xml->xpath('/rss/channel/item') as $item) {
   echo $item->title;
   echo ', ';
}
echo "\n";
 
echo "Dans l'ordre inverse : ";
foreach(array_reverse($xml->xpath('/rss/channel/item')) as  $item) {
   echo $item->title;
   echo ', ';
}
echo "\n";
?>
Ce qui donne :
Citation:
Dans l'ordre : 1, 2,
Dans l'ordre inverse : 2, 1,
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 01h20   #9
Invité régulier
 
Inscription : avril 2006
Messages : 33
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 33
Points : 8
Points : 8
Merci beaucoup de ton aide, là je ne tiens plus debout
je testerais demain, bonne nuit !
Cartouche 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 15h52.


 
 
 
 
Partenaires

Hébergement Web