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 :

Javascript et XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Invité
    Invité(e)
    Par défaut Javascript et XSL
    Bonjour à tous.

    Je débute en XSL. Je souhaite transformer un document XML en un document XHTML à l'aide d'une feuille XSL. Et ma page XHTML utilise du Javascript.

    Or, si j'appelle un fichier .JS entre les balises <head> (comme ci-dessous), il n'y a aucun problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <head>
        <script type="text/javascript" src="script.js"></script>
    </head>
    En revanche, si j'ajoute du Javascript entre les balises <script> (celles de <head> ou d'autres <script type="text/javascript"></script> dans la page), le Javascript n'est pas pris en compte, voire génère des erreurs, notamment lorsqu'il contient les signes < ou >.

    Dans ce dernier cas, mon navigateur affiche :
    "Erreur d'analyse XML : mal formé" etc.

    Pourtant le CSS ne me pose pas ce problème, je peux en placer où je veux.

    Est-il normal que le XSL ne traite pas le Javascript inclus dans la page?
    Y a-t-il un moyen de régler ce problème ou suis-je condamné à utiliser un fichier externe?

    Merci.

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Essaye de le mettre entre <![CDATA[ //... ]]>.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour cette réponse Loceka.

    L'utilisation de la balise CDATA semble fonctionner.

    A l'exception de document.write('texte');, pour ce que j'ai pu tester pour l'instant.

    Merci encore.

  4. #4
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 372
    Points
    2 372
    Par défaut
    Bonjour,

    je ne vois vraiment pas pourquoi le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.write('texte');
    ne passerait pas !

  5. #5
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    document.write n'est pas autorisé en XHTML car il faut utiliser le DOM pour bien respecter la structure.

    -Alain

  6. #6
    Invité
    Invité(e)
    Par défaut
    @polymorphisme : Moi non plus je ne vois pas pourquoi document.write() pose problème.

    @alain.couthures : Et le XHTML ne semble pas poser de problème : dans un fichier XHTML au format .HTML, il n'y a aucun problème pour utiliser cette fonction.

  7. #7
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    De tout façon c'est mal d'utiliser document.write() alors ça te fait une bonne raison de t'en passer.

    Sinon je ne vois pas non plus pourquoi ça marcherait pas dans un CDATA si tout le reste du js passe...

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par kéraunos Voir le message
    @alain.couthures : Et le XHTML ne semble pas poser de problème : dans un fichier XHTML au format .HTML, il n'y a aucun problème pour utiliser cette fonction.
    Avec une emphase sur semble.

    En réalité, les navigateurs traitent généralement le XHTML comme si c'était du HTML 4.01, parce que son content-type déclaré est le text/html rétrocompatible, et non pas application/xml ni application/xhtml+xml.

    Généralement, mais là le XHTML est généré avec une stylesheet, qui par défaut produit du XML, au content-type application/xml.
    Pour le navigateur, c'est donc bien du XML et non pas du HTML 4.01, et document.write() est désactivée pour respecter la structure.

    Test simple : ajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:output method="html"/>
    document.write() remarche immédiatement.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Thelvin, sur Safari 5 et Firefox 4 en tout cas, l'ajout de la balise <xsl:output> (avec le doctype complet ou juste la 'method' html) ne change rien : document.write(); ne fonctionne pas.

    Mais bon, je me fais une raison: mieux vaut utiliser document.getElementById().innerHTML = '';

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Avec ce fichier style.xsl :

    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
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:output method="html"/>
     
      <xsl:template match="/">
        <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
            <script><![CDATA[
              window.onload = function() {
                try {
                  document.write('<p>Hello World!</p>');
                } catch(e) {
                  alert(e);
                }
              };
            ]]></script>
          </head>
          <body>
          </body>
        </html>
      </xsl:template>
     
    </xsl:stylesheet>
    Et en ouvrant ce fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xml" href="style.xsl"?> 
    <root/>
    Firefox 4 affiche Hello World sans problème.

    Vire le <xsl:output> et tu as un alert() disant que document.write() n'existe pas.

    Mais bon, je me fais une raison: mieux vaut utiliser document.getElementById().innerHTML = '';
    +1 pour ça.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Au temps pour moi, ton code fonctionne.

    Les dysfonctionnements provenaient certainement de mon mauvais usage du Javascript, puisqu'au lieu de placer dans <head> une fonction s'exécutant à l'ouverture de la page comme tu l'as fait, je plaçais mon script dans <body> de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <body>
    	<script type="text/javascript">
    		<![CDATA[
    		document.write('<p>Hello World!</p>');
    		]]>
    	</script>
    </body>

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Ah tiens, en effet. Mais cela ressemble à un bug, ou du moins une limitation, des navigateurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupérer des valeurs javascript depuis xsl
    Par luna007 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 16/02/2008, 22h39
  2. Réponses: 2
    Dernier message: 26/07/2007, 09h27
  3. [JavaScript] Noeud XSL dans variable Javascript
    Par soli.f dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/04/2007, 12h41
  4. [AJAX] Exécution Javascript dans XSL (FireFox)
    Par mchaz84 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/03/2007, 08h48
  5. Javascript XML XSL
    Par bewonder dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/01/2007, 16h30

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