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

XSL/XSLT/XPATH XML Discussion :

xmlns pose pb à ma trransf. si le xml est extérieur


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Par défaut xmlns pose pb à ma trransf. si le xml est extérieur
    Salut
    mon fichier php http://flandriac.free.fr/xsl/xslalo1.php?filxml=alo.xml
    fonctionne en utilisant mon xsltalo2.xsl duquel j'ai pu solutionner mon pb de name space
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- Edited by XMLSpy® -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://www.allocine.net/v6/ns/">
    <xsl:template match="/">
      <html>
      <body>
      <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>productionYear</th>
            <th>code</th>
          </tr>
          <xsl:for-each select="ns:movie">
          <tr>
            <td><xsl:value-of select="ns:title"/></td>
            <td><xsl:value-of select="ns:productionYear"/></td>
            <td><xsl:value-of select="ns:casting/ns:castMember/ns:person/@code" /></td>
          </tr>
          </xsl:for-each>
        </table>
      </body>
      </html>
    </xsl:template>
    </xsl:stylesheet>
    En revanche avec
    http://flandriac.free.fr/xsl/xslalo1...arge&version=2
    j'ai l'erreur
    Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in /mnt/160/sda/1/3/flandriac/xsl/xslalo1.php on line 8
    Pourtant les deux fichiers xml ont le même contenu
    Vous pouvez vérifier mes fichiers sont en ligne.
    Pour info mon xslalo1.php est comme ceci:
    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
      <?
    // Crée le processeur XSLT
    $xh = xslt_create();
    xslt_set_base ($xh, 'file://' . getcwd () . '/');
    if ($filxml==""){$filxml='http://api.allocine.fr/xml/movie?code=182097&media=mp4-lc&partner=YW5kcm9pZC12Mg&profile=large&version=2';}
    //if ($filxml==""){$filxml='alo.xml';}
    // Traite le document, puis affiche le résultat
    $result = xslt_process($xh, $filxml, 'xsltalo2.xsl');
    if (!$result)
      echo ("Erreur XSLT ...". $filxml);
    else
      echo ($result);
     
    // Détruit le processeur XSLT
    xslt_free($xh);
    ?>
    Merci de votre aide, je progresse

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    L'URL vers http://api.allocine.fr/xml/movie?cod...arge&version=2

    n'est pas encodée. Ça ne peut pas marcher. Il faut encoder les : les ? et les & au minimum.

    Je ne vois pas le rapport avec xmlns.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Par défaut
    L'URL vers http://api.allocine.fr/xml/movie?cod...arge&version=2
    contient <?xml version="1.0" encoding="UTF-8"?> en début de fichier
    cela ne suffit pas? Ca ne veut pas dire qu'elle soit encodée?

    En fait j'ai déduit que le problème me venait du xmlns car si je l'enlève ou que je préfixe par ns: dans mon xslt ca fonctionne. Mais ça ne fonctionne qu'en local (dans mon fichier http://flandriac.free.fr/xsl/alo.xml qui est un copié-collé du contenu de http://api.allocine.fr/xml/movie?cod...arge&version=2) je devrais donc avoir là aussi le pb d'encodage dont tu parles thelvin
    J'avoue que je ne suis pas bien à l'aise avec les histoires d'encodage et qu'elles me réserveront encore d'autre petits soucis (les jeux de caractères français.. mais là je m'égarerais du pb en cours. Une chose à la fois )

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Edit : En fait, avant tout ça, il y a plus important. Les pages perso free n'ont pas accès aux URL externes par défaut. Ne sont autorisés que ce qui a été ajouté à une whitelist, sur demande. Je ne sais pas si http://api.allocine.fr/xml/movie a été ajouté à la whitelist.

    Edit 2 : Nope, cette URL n'est pas whitelistée. Il faut demander sa mise en whitelist sur le newsgroup idoine : proxad.free.services.pagesperso
    Une gentille personne donne des retours d'expérience sur l'utilisation des pages persos Free. Y compris sur comment communiquer sur le newsgroup.

    Mais bon, ceci étant fait :
    --------

    Une URL c'est le machin qui s'affiche dans la barre d'URL du navigateur. Ça ne contient pas <?xml version="1.0"?>. Là tu me parles de ce qu'on trouve en demandant l'URL en question. Je te parle pas de son contenu. Je te parle de l'URL elle-même.

    Une URL ne peut pas être passée en paramètre d'une autre URL, ou alors elle doit être encodée.

    Autrement dit, ce n'est pas :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    http://flandriac.free.fr/xsl/xslalo1.php?filxml=http://api.allocine.fr/xml/movie?code=182097&media=mp4-lc&partner=YW5kcm9pZC12Mg&profile=large&version=2

    mais

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    http://flandriac.free.fr/xsl/xslalo1.php?filxml=http%3A%2F%2Fapi.allocine.fr%2Fxml%2Fmovie%3Fcode%3D182097%26media%3Dmp4-lc%26partner%3DYW5kcm9pZC12Mg%26profile%3Dlarge%26version%3D2

    Tout cela n'a rien à voir avec les jeux de caractères.

    Citation Envoyé par gdoise Voir le message
    LEn fait j'ai déduit que le problème me venait du xmlns car si je l'enlève ou que je préfixe par ns: dans mon xslt ca fonctionne. Mais ça ne fonctionne qu'en local (dans mon fichier http://flandriac.free.fr/xsl/alo.xml qui est un copié-collé du contenu de http://api.allocine.fr/xml/movie?cod...arge&version=2) je devrais donc avoir là aussi le pb d'encodage dont tu parles thelvin
    C'est parce que la chaîne alo.xml peut parfaitement être passée en paramètre d'une URL, car elle n'est pas elle-même une URL. Ce n'est pas le cas de http://flandriac.free.fr/xsl/xslalo1...arge&version=2 qui contient des & et des ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Par défaut
    Haaa d'acccoooooord . Je comprend mieux !
    Cet après-midi j'ai avancé sur mon script en ajoutant un nettoyage du fichier source par $page=preg_replace('#xmlns="(.*)"#','',$page)
    Avec $page un string contenant le contenu envoyé par l'url.
    Ainsi je ne serais plus embêté par les espace de nom des sources xml a transformer. Je ne sais pas si c'est barbare ou malin mais ca devrait bien fonctionner.
    En espérant que http://api.allocine.fr/xml/movie fasse partie de la whitelist il ne me resterait donc que le problème d'encodage de mes URL dans mon script que j'ai simplifié si dessous: xslalo3.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?
    $xh = xslt_create();
    xslt_set_base ($xh, 'file://' . getcwd () . '/');
    if ($url=="") {$url='http://api.allocine.fr/xml/movie?code=182097&media=mp4-lc&partner=YW5kcm9pZC12Mg&profile=large&version=2';}
    $xml=fileTostring($url);  // créer une chaine à partir du contenu envoyé par l'url transmise
    $xml=preg_replace('#xmlns="(.*)"#','',$xml); //retire toute les occurence de xmlns="..."   (http://fr2.php.net/manual/fr/function.preg-replace.php     http://www.php.net/manual/fr/regexp.reference.meta.php)
    uplod ($xml,"outfile.xml");  // créer un fichier à partir de la chaine $xml nettoyée
    $result = xslt_process($xh,'outfile.xml', 'xsltalo3.xsl');
    if (!$result)
      echo ("Erreur XSLT ...");
    else
      echo ($result);
    
    // Détruit le processeur XSLT
    xslt_free($xh);
    
    
    function fileTostring($url)
    {
      $url=urlencode($url);   // !! Là je ne doit pas avoir tout bon sur l'encodage de l'url !!
      echo $url;
      $fp = fopen($url,"r"); //lecture du fichier 
      $page="";
      if ($fp){
        while (!feof($fp)){
           //on parcoure toutes les lignes
           $page .= @fgets($fp, 4096); // lecture du contenu de la ligne
           }
        fclose ($fp);
      }
      else{
        echo "Page innacessible";    
      }
      return $page; 
    }
    
    function uplod($strin,$urlout){
      if ($urlout==""){$urlout="outfile.xml";}  // si on ne veut pas toujours préciser $urlout
      $file = fopen ("".$urlout, "w");
      if (!$file) {
          echo "<p>Unable to open remote file for writing.\n";
          exit;
      }
      fwrite ($file, $strin);
      fclose ($file);
    }
    ?>
    Si on appel http://flandriac.free.fr/xsl/xslalo3.php?url=alo.xml ca fonctionne car il n'y a pas le pb d'encodage.
    Super MERCI ca prend forme!

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par gdoise Voir le message
    Ainsi je ne serais plus embêté par les espace de nom des sources xml a transformer. Je ne sais pas si c'est barbare ou malin mais ca devrait bien fonctionner.
    Ça fonctionnera peut-être pendant un temps, mais en principe virer les namespaces est censé être plus compliqué que ça.
    Il vaut mieux faire avec les namespaces. Je veux bien croire que PHP ne facilite pas la tâche, mais si tu utilises XSLT ce n'est pas bien compliqué.

    Citation Envoyé par gdoise Voir le message
    En espérant que http://api.allocine.fr/xml/movie fasse partie de la whitelist
    Apparemment ce n'est pas le cas. Voir mon edit 2, dans le message précédent.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. xmlns bloque la lecture d'un fichier XML en as3
    Par line6 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 17/03/2008, 11h53
  2. XML est ce qu'il prend en considération la casse
    Par soumou dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 31/03/2006, 09h53
  3. [XML]Comment tester que mon fichier XML est comme ceci?
    Par Devil666 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/06/2005, 13h41
  4. [DTD][java]Verifier qu'un doc XML est bien formé
    Par bart64 dans le forum Valider
    Réponses: 3
    Dernier message: 08/01/2005, 14h17
  5. En quoi XML est-il un moyen universel d'échange de données ?
    Par Pomalaix dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 27/01/2003, 11h29

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