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

Langage PHP Discussion :

Parser String xml


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur Informatique et Développeur Android
    Inscrit en
    Janvier 2010
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 384
    Par défaut Parser String xml
    Bonjour, j'ai un string sous forme xml voilà exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    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 : 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
    <?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 :
    string 'May 16, 2011 - 06:00 AM EDT / 2011.05.16 1000 UTC' (length=49)

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    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 : 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
    <?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>" ;
    }

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur Informatique et Développeur Android
    Inscrit en
    Janvier 2010
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 384
    Par défaut
    merci pour vos réponses mais vos solutions ne marche plus dans mon cas car voilà le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requst =$client->call('meteoo', $parametres);
     
    var_dump($requst);
    le résultat de var_dump est celle situé au dessus

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Time #0 = May 17, 2011 - 03:30 AM EDT / 2011.05.17 0730 UTC

  6. #6
    Membre très actif
    Homme Profil pro
    Ingénieur Informatique et Développeur Android
    Inscrit en
    Janvier 2010
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 384
    Par défaut
    voilà je vous donne tout mes scripts :
    code web service
    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
     
    <?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 : 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
     
    <?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 ...

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom->loadXML(string_get_contents($requst)) ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dom->loadXML($requst) ;

Discussions similaires

  1. Parser String xml Android
    Par tlili_info dans le forum Android
    Réponses: 1
    Dernier message: 17/05/2011, 10h18
  2. [JDOM] Parser du xml sous forme de string avec JDOM
    Par Lord Yu dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 02/02/2010, 12h47
  3. [DOM] Parser String to XML : [#document: null]
    Par lextaz33 dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 02/04/2009, 17h53
  4. parser une string xml avec jsp
    Par issamos4 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 26/03/2007, 09h50
  5. [XML] [string] parser une string XML
    Par fxp17 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 29/03/2006, 10h27

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