Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 16/05/2011, 12h53   #1
Membre habitué
 
Homme younes tlili
Ingénieur Informatique et Développeur Android
Inscription : janvier 2010
Messages : 225
Détails du profil
Informations personnelles :
Nom : Homme younes tlili
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique et Développeur Android

Informations forums :
Inscription : janvier 2010
Messages : 225
Points : 130
Points : 130
Envoyer un message via Skype™ à tlili_info
Par défaut Parser String xml

Bonjour, j'ai un string sous forme xml voilà exemple
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
  <Location>Tunis-Carthage, Tunisia (DTTA) 36-50N 010-14E 4M</Location>
  <Time>May 16, 2011 - 06:00 AM EDT / 2011.05.16 1000 UTC</Time>
  <Wind> from the W (280 degrees) at 17 MPH (15 KT) (direction variable):0</Wind>
  <Visibility> greater than 7 mile(s):0</Visibility>
  <SkyConditions> partly cloudy</SkyConditions>
  <Temperature> 73 F (23 C)</Temperature>
  <DewPoint> 46 F (8 C)</DewPoint>
  <RelativeHumidity> 38%</RelativeHumidity>..
je dois recuperer le Time et Temperature à part. je n'ai pas besoin des autres informations .
j'essayé de parser cette string avec ce code :
Code :
1
2
3
4
5
6
 
$dom = new DomDocument();
$dom ->loadXML($requst);
$res = $dom->validate();
 
$timeac = $dom->getElementsByTagName("Time");
sachant que $requst est le string xml . il me retourne false
tlili_info est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 13h06   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Tu demandes une validation mais tu ne spécifies pas de DTD.
J'ai eu un joli warning en essayant ton code à cause de ça.
Penses à activer les erreurs de PHP.

Concernant un code basique :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$str = '<?xml version="1.0" encoding="utf-8"?>
<CurrentWeather>
  <Location>Tunis-Carthage, Tunisia (DTTA) 36-50N 010-14E 4M</Location>
  <Time>May 16, 2011 - 06:00 AM EDT / 2011.05.16 1000 UTC</Time>
  <Wind> from the W (280 degrees) at 17 MPH (15 KT) (direction variable):0</Wind>
  <Visibility> greater than 7 mile(s):0</Visibility>
  <SkyConditions> partly cloudy</SkyConditions>
  <Temperature> 73 F (23 C)</Temperature>
  <DewPoint> 46 F (8 C)</DewPoint>
  <RelativeHumidity> 38%</RelativeHumidity>
</CurrentWeather>';
 
$dom = new DomDocument();
$dom ->loadXML($str);
 
$timeac = $dom->getElementsByTagName("Time");
var_dump($timeac->item(0)->nodeValue);
Donne :
Citation:
string 'May 16, 2011 - 06:00 AM EDT / 2011.05.16 1000 UTC' (length=49)
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 13h15   #3
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 449
Points : 3 449
Oui, attention au validate/DTD. De plus j'ai l'UTF-16 qui m'a posé problème.
Et garde en tête que getElementsByTagName retoure une DOMNodeList et pas un tableau.
http://fr2.php.net/manual/fr/class.domnodelist.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
$requst = '<?xml version="1.0" encoding="utf-8"?>
<CurrentWeather>
  <Location>Tunis-Carthage, Tunisia (DTTA) 36-50N 010-14E 4M</Location>
  <Time>May 16, 2011 - 06:00 AM EDT / 2011.05.16 1000 UTC</Time>
  <Wind> from the W (280 degrees) at 17 MPH (15 KT) (direction variable):0</Wind>
  <Visibility> greater than 7 mile(s):0</Visibility>
  <SkyConditions> partly cloudy</SkyConditions>
  <Temperature> 73 F (23 C)</Temperature>
  <DewPoint> 46 F (8 C)</DewPoint>
  <RelativeHumidity> 38%</RelativeHumidity>
</CurrentWeather>' ;
 
$dom = new DomDocument();
$dom ->loadXML($requst);
//$res = $dom->validate();
 
$items = $dom->getElementsByTagName("Time") ;
 
foreach ( $items as $i => $item ) {
    echo "$item->tagName #$i = $item->nodeValue<br>" ;
}
__________________
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 17/05/2011, 10h54   #4
Membre habitué
 
Homme younes tlili
Ingénieur Informatique et Développeur Android
Inscription : janvier 2010
Messages : 225
Détails du profil
Informations personnelles :
Nom : Homme younes tlili
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique et Développeur Android

Informations forums :
Inscription : janvier 2010
Messages : 225
Points : 130
Points : 130
Envoyer un message via Skype™ à tlili_info
merci pour vos réponses mais vos solutions ne marche plus dans mon cas car voilà le résultat :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
anyType{GetWeatherResult=<?xml version="1.0" encoding="utf-16"?>
 <CurrentWeather>
  <Location>Tunis-Carthage, Tunisia (DTTA) 36-50N 010-14E 4M</Location>
  <Time>May 17, 2011 - 03:30 AM EDT / 2011.05.17 0730 UTC</Time>
 <Wind> from the W (280 degrees) at 8 MPH (7 KT) (direction variable):0</Wind>
  <Visibility> greater than 7 mile(s):0</Visibility>
   <SkyConditions> partly cloudy</SkyConditions>
 <Temperature> 66 F (19 C)</Temperature>
 <DewPoint> 51 F (11 C)</DewPoint>
<RelativeHumidity> 59%</RelativeHumidity>
 <Pressure> 30.21 in. Hg (1023 hPa)</Pressure>
  <Status>Success</Status>
 </CurrentWeather>; }
c'est le résultat d'un appel à un web service . .....
cette string est récupérer dans un string request
voilà partie de web service client
Code :
1
2
3
$requst =$client->call('meteoo', $parametres);
 
var_dump($requst);
le résultat de var_dump est celle situé au dessus
tlili_info est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 11h29   #5
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 449
Points : 3 449
Citation:
Envoyé par tlili_info Voir le message
merci pour vos réponses mais vos solutions ne marche plus dans mon cas car voilà le résultat
Je viens de retester, chez moi ça fonctionne.
Et si tu donnais un script que nous pourrions tester/corriger ?


xmlutf16.php (codage UTF-16) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
<Location>Tunis-Carthage, Tunisia (DTTA) 36-50N 010-14E 4M</Location>
<Time>May 17, 2011 - 03:30 AM EDT / 2011.05.17 0730 UTC</Time>
<Wind> from the W (280 degrees) at 8 MPH (7 KT) (direction variable):0</Wind>
<Visibility> greater than 7 mile(s):0</Visibility>
<SkyConditions> partly cloudy</SkyConditions>
<Temperature> 66 F (19 C)</Temperature>
<DewPoint> 51 F (11 C)</DewPoint>
<RelativeHumidity> 59%</RelativeHumidity>
<Pressure> 30.21 in. Hg (1023 hPa)</Pressure>
<Status>Success</Status>
</CurrentWeather>
Script PHP :
Code :
1
2
3
4
5
6
7
8
9
10
<?php
 
$dom = new DOMDocument('1.0', 'UTF-16') ;
$dom->loadXML(file_get_contents('xmlutf16.xml')) ;
 
$items = $dom->getElementsByTagName("Time") ;
 
foreach ( $items as $i => $item ) {
    echo "$item->tagName #$i = $item->nodeValue<br>" ;
}
Résultat :
Code :
Time #0 = May 17, 2011 - 03:30 AM EDT / 2011.05.17 0730 UTC
__________________
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 17/05/2011, 15h53   #6
Membre habitué
 
Homme younes tlili
Ingénieur Informatique et Développeur Android
Inscription : janvier 2010
Messages : 225
Détails du profil
Informations personnelles :
Nom : Homme younes tlili
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique et Développeur Android

Informations forums :
Inscription : janvier 2010
Messages : 225
Points : 130
Points : 130
Envoyer un message via Skype™ à tlili_info
voilà je vous donne tout mes scripts :
code web service
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<?php
require_once ('lib/nusoap.php');
$ns="http://localhost:8080/mobile/";
$serveur = new soap_server();
$serveur->configureWSDL('meteoo',$ns);
$serveur->wsdl->schemaTargetNamespace=$ns;
$serveur->register('meteoo',array('CityName'=> 'xsd:string','CountryName'=>'xsd:string'),array('return'=>'xsd:Array'),$ns);
function  meteoo ($CityName, $CountryName)
{
$wsdl ='http://www.webservicex.net/globalweather.asmx?WSDL';
$client = new nusoap_client($wsdl,true);
$parametres = array('CityName'=>$CityName,'CountryName'=>$CountryName);
$requst =$client->call('GetWeather', $parametres); 
return new soapval('return','xsd:Array',$requst);
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA : '';
$serveur->service($HTTP_RAW_POST_DATA);
 
?>
voila mon script coté client
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php 
set_time_limit(0);
require_once ('lib/nusoap.php');
$wsdl ='http://localhost:8080/mobile/meteo.php?wsdl';
$client = new nusoap_client($wsdl,true);
$parametres = array('CityName'=>'tunis','CountryName'=>'Tunisia');
$requst =$client->call('meteoo', $parametres);
$dom = new DOMDocument('1.0', 'UTF-16') ;
$dom->loadXML(string_get_contents($requst)) ;
 
$items = $dom->getElementsByTagName("Time") ;
 
foreach ( $items as $i => $item ) {
    echo "$item->tagName #$i = $item->nodeValue<br>" ;
}
var_dump($requst);
 
?>
je veux juste recuperer juste time ou temperature ...
tlili_info est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h09   #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 449
Points : 3 449
Code :
$dom->loadXML(string_get_contents($requst)) ;

Code :
$dom->loadXML($requst) ;
__________________
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 17/05/2011, 17h10   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Séb. Voir le message
Code :
$dom->loadXML(string_get_contents($requst)) ;

Code :
$dom->loadXML($requst) ;
Code :
$dom->loadXML($requst);




__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h19   #9
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 449
Points : 3 449
Citation:
Envoyé par stealth35 Voir le message


http://fr2.php.net/manual/fr/domdocument.loadxml.php :

Citation:
DOMDocument::loadXML

(PHP 5)

DOMDocument::loadXML — Charge du XML depuis une chaîne de caractères
http://fr2.php.net/manual/fr/domdocument.load.php :

Citation:
DOMDocument::load

(PHP 5)

DOMDocument::load — Charge du XML depuis un fichier
__________________
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 17/05/2011, 17h21   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
$requst c'est pas le nom d'un fichier ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h23   #11
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 449
Points : 3 449
Pas l'impression, mais seul tlili_info pourra nous le dire, à moins que qqu'un ne se dévoue pour aller lire la doc de nusoap_client::call( ) et ce ne sera pas moi
__________________
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 17/05/2011, 17h25   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Séb. Voir le message
Pas l'impression, mais seul tlili_info pourra nous le dire, à moins que qqu'un ne se dévoue pour aller lire la doc de nusoap_client::call( ) et ce ne sera pas moi
y'a confusion entre le string_get_contents (qui n'existe pas) et file_get_contents dans l'exemple plus haut
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h26   #13
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 449
Points : 3 449
Ouaip parce qu'il est reparti sur mon testcase dans lequel j'ai fait :

Code :
$dom->loadXML(file_get_contents('xmlutf16.xml')) ;
Plutôt que :

Code :
$dom->load('xmlutf16.xml') ;
Pas taper...
__________________
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 17/05/2011, 17h29   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
sinon tlili_info > pourquoi nu soap ? t'as pas l'extension SOAP sur ton serveur (sachant que nu soap c'est une lib PHP 4)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 00h16   #15
Membre habitué
 
Homme younes tlili
Ingénieur Informatique et Développeur Android
Inscription : janvier 2010
Messages : 225
Détails du profil
Informations personnelles :
Nom : Homme younes tlili
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique et Développeur Android

Informations forums :
Inscription : janvier 2010
Messages : 225
Points : 130
Points : 130
Envoyer un message via Skype™ à tlili_info
Merci pour votre attention. tout d'abord requst est normalement la réponse de Web service de type Array (je mes string mais le ws ne retourne rien) . pour nusoap, je n'ai pas des grandes idées s'il existe ou pas dans php4 de plus j'utilise cette ws pour un autre projet non plus dans une projet php .
var_dump($requst) me retourne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
array
  'GetWeatherResult' => string '<?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
  <Location>Tunis-Carthage, Tunisia (DTTA) 36-50N 010-14E 4M</Location>
  <Time>May 17, 2011 - 05:30 PM EDT / 2011.05.17 2130 UTC</Time>
  <Wind> Calm:0</Wind>
  <Visibility> greater than 7 mile(s):0</Visibility>
  <SkyConditions> mostly clear</SkyConditions>
  <Temperature> 60 F (16 C)</Temperature>
  <DewPoint> 55 F (13 C)</DewPoint>
  <RelativeHumidity> 82%</RelativeHumidity>
  <Pressure> 30.15 in. Hg (1021 hPa)</Pressure>
  <Status>Success</Status'... (length=531)
tlili_info est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 01h28   #16
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 449
Points : 3 449
Dans ce cas :

Code :
$dom->loadXML($requst['GetWeatherResult']) ;
Le reste ne change pas.
__________________
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é
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h03.


 
 
 
 
Partenaires

Hébergement Web