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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] et entête..


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut [SimpleXML] et entête..
    Bonjour, je cherche une réponse à mon problème depuis hier sans succès

    Cela me parait pourtant simple, mais j'ai du louper quelquechose ...

    Voila je débute avec simplexml et je souhaite créer une intéraction avec un API

    J'envoie ma requête à l'API avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $fp = fsockopen ("ssl://$host", $port, $errno, $errstr, 30); 
     
    if (!$fp) { 
      print ("ERREUR HTTP !"); 
    } else { 
      fputs ($fp, $header . $xml); 
      while (!feof($fp)) { 
        $res .=  htmlEntities(fgets ($fp, 1024));  
      } 
      fclose ($fp);
    print($res);
    }
    Jusqu'à la tout va bien, je récupére un code xml du genre :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    HTTP/1.1 200 OK
    Date: Wed, 18 Feb 2009 12:28:16 GMT
    Server: ServerName/XML-RSA Server
    Content-Length: 701
    Content-Type: text/xml
     
    <?xml version='1.0' encoding="UTF-8" standalone="no" ?>
    <!DOCTYPE OPS_envelope SYSTEM "ops.dtd">
    <OPS_envelope>
     <header>
      <version>0.9</version>
      </header>
     <body>
      <data_block>
       <dt_assoc>
        <item key="protocol">XCP</item>
        <item key="object">DOMAIN</item>
        <item key="response_text">Unexpected response received from the Registry: [500] [Error 2502 from ar.nic.es]</item>
        <item key="action">REPLY</item>
        <item key="attributes">
         <dt_assoc>
          <item key="status">invalid</item>
          <item key="match"></item>
         </dt_assoc>
        </item>
        <item key="response_code">436</item>
        <item key="is_success">0</item>
       </dt_assoc>
      </data_block>
     </body>
    </OPS_envelope>
    Hors je souhaite parser le code XML en utilisant simplexml mais je n'y arrive pas à cause de l'entête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HTTP/1.1 200 OK
    Date: Wed, 18 Feb 2009 12:28:16 GMT
    Server: ServerName/XML-RSA Server
    Content-Length: 701
    Content-Type: text/xml
    Je pense que je pourrais éventuellement mettre un compteur avec for pour ne pas enregistrer les 6 premiers lignes mais je trouve cela pas très propre, je vous demande donc quel est la méthode à utiliser pour faire ce genre de requête...

    Bien sûr lorsque je lance le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $fp = fsockopen ("ssl://$host", $port, $errno, $errstr, 30); 
     
    if (!$fp) { 
      print ("ERREUR HTTP !"); 
    } else { 
      fputs ($fp, $header . $xml); 
      while (!feof($fp)) { 
        $res .=  htmlEntities(fgets ($fp, 1024));  
      } 
      fclose ($fp);
    $xml = simplexml_load_string($res);
    print_r($xml);
    }
    J'obtiens des erreur du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning:  simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Start tag expected, '<' not found in ...
    Je vous remercie d'avance

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut
    Je me réponds tout seul

    J'ai trouvé comment faire, je retire d'abord les lignes qui empêchent le xml de fonctionner :
    Je n'utilise pas htmlEntities() qui sert à encoder les caractères pour qu'elles s'affichent correctement dans le navigateur.
    Ensuite je repère la ligne vide et je la supprime ainsi que tout ce qui est au dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $start = strpos($res, "\r\n\r\n");
    if ($start !== FALSE)
    {
    $res = substr($res, $start + strlen("\r\n\r\n"));
    Puis je n'utilise pas simplexml_load_string mais j'instancie simplement simpleXML avec simpleXMLElement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml = new SimpleXMLElement($res);
    Voilà maintenant j'ai réussi à récupérer le variable, mais du coup maintenant j'ai un autre problème à résoudre ...

    Dans mon code XML j'ai par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <body>
      <data_block>
       <dt_assoc>
        <item key="protocol">XCP</item>
        <item key="object">DOMAIN</item>
        <item key="response_code">210</item>
    Hors dans le variable généré par simplexml je ne vois pas le key mais j'ai "0", "1" ou "2" etc... à la place.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [body] => SimpleXMLElement Object
            (
                [data_block] => SimpleXMLElement Object
                    (
                        [dt_assoc] => SimpleXMLElement Object
                            (
                                [item] => Array
                                    (
                                        [0] => XCP
                                        [1] => DOMAIN
                                        [2] => 210
    Y a-t-il un réglage pour arriver à demander par exemple :

    $xml->body->data_block->dt_assoc->item['response_code']

    au lieu de devoir demander
    $xml->body->data_block->dt_assoc->item[2]

    Je demandes ceci comme le response_code n'est pas forcément au numéro 2 ...

    Je vous remercie d'avance

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut
    Je continue mon monologue... : après un peu de recherche j'ai réussi à faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $code = $xml->xpath("/OPS_envelope/body/data_block/dt_assoc/item[@key='response_code']");
    $code = $code[0];
    Cela fonctionne mais je n'aime pas particulièrement ce code, j'aimerais pouvoir sortir directement un string au lieu d'un tableau ... voir même y arriver sans utiliser xpath ... (histoire d'au moins savoir comment faire !), est-ce que quelqu'un aurait un réponse ? même négative ...

    Merci d'avance

Discussions similaires

  1. [CR.NET] Rapport de présences avec série de dates en entête
    Par crackity_jones666 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 30/07/2004, 09h27
  2. [CR] Entête de tableau à chaque page, et tableau...
    Par titelle dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 15/04/2004, 09h13
  3. libelles et entêtes de colonnes dynamiques
    Par valfredr dans le forum XMLRAD
    Réponses: 7
    Dernier message: 09/03/2004, 21h40
  4. ligne d'entête création d'un fichier XML
    Par cduterme dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 23/02/2004, 15h30
  5. [CR] entête et pied sur page 1/B de matrice
    Par chloe.j3 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 04/09/2002, 12h07

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