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 15/04/2006, 10h14   #1
Nouveau Membre du Club
 
Inscription : février 2004
Messages : 202
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 202
Points : 38
Points : 38
Par défaut [SimpleXML] Parser un XML et en récupérer des valeurs

salut,

je ne sais pas trop par ou commencer.. je dois lire ce xml:

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
<icestats>
<client_connections>5479</client_connections>
<clients>4</clients>
<connections>5569</connections>
<file_connections>588</file_connections>
<listener_connections>434</listener_connections>
<server>Icecast 2.3.1</server>
<server_start>Mon, 13 Mar 2006 22:56:49 +0100</server_start>
<source_client_connections>72</source_client_connections>
<source_relay_connections>0</source_relay_connections>
<source_total_connections>72</source_total_connections>
<sources>1</sources>
<stats>0</stats>
<stats_connections>0</stats_connections>
 
<source mount="/encoder">
<audio_info>
ice-samplerate=44100;ice-bitrate=128;ice-channels=2
</audio_info>
<bitrate>128</bitrate>
<genre>Multi</genre>
<ice-bitrate>128</ice-bitrate>
<ice-channels>2</ice-channels>
<ice-samplerate>44100</ice-samplerate>
<listener_peak>2</listener_peak>
<listeners>2</listeners>
<listenurl>http://localhost:8000/test</listenurl>
<max_listeners>unlimited</max_listeners>
<public>1</public>
<server_description>Live</server_description>
<server_name>Live</server_name>
<server_type>audio/aacp</server_type>
<slow_listeners>1</slow_listeners>
<source_ip>xxx</source_ip>
<stream_start>Fri, 14 Apr 2006 11:54:15 +0200</stream_start>
<total_bytes_read>1282055125</total_bytes_read>
<total_bytes_sent>1340359993</total_bytes_sent>
</source>
 
</icestats>


il faudrait bien que je sache lire seulement la node <listeners> de la node <source mount="/encoder"> ...... </node>

Comment puis-je faire?
Merci
mickael.be est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2006, 12h54   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
lire seulement la node <listeners> de la node <source mount="/encoder">
Regarde du côté des expressions XPath :

Code :
//source[@mount="/encoder"]/listeners
Sous PHP5 et SimpleXML : http://www.php.net/manual/fr/function.simplexml-element-xpath.php
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2006, 13h33   #3
Nouveau Membre du Club
 
Inscription : février 2004
Messages : 202
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 202
Points : 38
Points : 38
Salut,

j'ai réussit à faire plus ou moins ce que je voulais avec des expressions régulières..

Code :
1
2
3
4
5
6
7
		if(eregi("<source mount=\"/encoder\">(.*)</source>",$buffer, $node1)) {
			eregi("<listeners>(.*)</listeners>",$node1[1], $node2);
			$listeners = $node2[1];
}
else {
echo "la source est DOWN!";
}
seulement, quand j'ai plusieurs <sources> il prend pas le première balise </source> rencontrée, mais la dernière.. comment eviter cela ?

merci

ps: je vais regarder du coté de xpath quand meme
mickael.be est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2006, 13h45   #4
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
il faut que tu créé un tableau et pour chaque occurence de listeners, tu ajoutes un élément dans le tableau
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2006, 13h49   #5
Nouveau Membre du Club
 
Inscription : février 2004
Messages : 202
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 202
Points : 38
Points : 38
Pq un tableau?

j'ai juste besoin du <listeners> de <mountpoint="/encoder"> les autres je m'en balance :-)

idée?

merci
mickael.be est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2006, 14h05   #6
Nouveau Membre du Club
 
Inscription : février 2004
Messages : 202
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 202
Points : 38
Points : 38
trouvé!

Code :
1
2
3
4
5
6
7
8
$rs = simplexml_load_file($xml);
foreach($rs->xpath('//source[@mount="/encodeur"]') as $rsrow){
   $row = simplexml_load_string($rsrow->asXML());
   $valeur = $row->xpath('//listeners');
 
   echo $valeur[0];
 
}
merci
mickael.be est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2006, 15h08   #7
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Tu peux faire plus simple en te passant du foreach( ) :

Le 1er <listeners> du 1er <source mount="encoder"> rencontré :
Code :
//source[@mount="/encoder"][1]/listeners[1]
Ou tout simplement le 1er <listeners> rencontré dans le document :
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. 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 19h32.


 
 
 
 
Partenaires

Hébergement Web