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 :

Paramètre XSLT via Javascript


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    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 : 50
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut Paramètre XSLT via Javascript
    Bonjour,

    j'ai un tableau HTML généré par un fichier XML qui appele une feuille de style XSL.

    Les intitulés du tableau HTML sont des liens qui envoyent un paramètre de tri.

    Comment récupérer la valeur d'un paramètre afin de trier les éléments de mon tableau ?

    Je sais qu'on peut le faire avec Javascript, mais je n'en connais pas les détailles.

    BIen cordialement.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    il faut commencer par oublier XSLT et XML.

    Tu prends juste un tableau HTML tout normal, avec les mêmes données.
    Et tu fais le JavaScript qui s'occupe de trier ce tableau HTML normal.

    Une fois que tu sauras faire ça avec HTML/JavaScript, il suffit de remettre le même HTML/JavaScript dans ce que générera ton XSLT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    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 : 50
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Je suis parti avec l'exemple « Basic Example » (https://developer.mozilla.org/en-US/.../Basic_Example)


    L'url file:///home/gregory/workspace/documentation/dictionary/model.xhtml?myOrder=descending retourne dans Mozilla :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <html>
    <head>
    <title>Insert title here</title>
    <script>
    var xslStylesheet; var xsltProcessor = new XSLTProcessor(); var myDOM; var xmlDoc; function Init(){ // load the xslt file, example1.xsl var myXMLHTTPRequest = new XMLHttpRequest(); myXMLHTTPRequest.open("GET", "model.xsl", false); myXMLHTTPRequest.send(null); xslStylesheet = myXMLHTTPRequest.responseXML; xsltProcessor.importStylesheet(xslStylesheet); // load the xml file, example1.xml myXMLHTTPRequest = new XMLHttpRequest(); myXMLHTTPRequest.open("GET", "model.xml", false); myXMLHTTPRequest.send(null); xmlDoc = myXMLHTTPRequest.responseXML; var fragment = xsltProcessor.transformToFragment(xmlDoc, document); document.getElementById("example").innerHTML = ""; myDOM = fragment; document.getElementById("example").appendChild(fragment); }
    </script>
    </head>
    <body onload="javascript:Init();"> </body>
    </html>
    Donc, il y a un truc qui ne fonctionne pas. La transformation XSLT ne s'effectue pas.
    À mon avis, il y a un soucis avec le javascript, mais je ne saurais dire où.
    Les explications de la page d'exemple n'est pas claire du tout.


    Mon fichier model.xml avec l'élément racine <myNS:Article xmlns:myNS="http://devedge.netscape.com/2002/de" id="example">:

    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"?>
    <myNS:Article xmlns:myNS="http://devedge.netscape.com/2002/de" id="example">
      <myNS:Title>My Article</myNS:Title>
      <myNS:Authors>
        <myNS:Author company="Foopy Corp.">Mr. Foo</myNS:Author>
        <myNS:Author>Mr. Bar</myNS:Author>
      </myNS:Authors>
      <myNS:Body>
        The <b>rain</b> in <u>Spain</u> stays mainly in the plains.
      </myNS:Body>
    </myNS:Article>

    La feuille de style XSLT model.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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?xml version="1.0"?>
     
    <xsl:stylesheet version="1.0"
                       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                       xmlns:myNS="http://devedge.netscape.com/2002/de">
     
      <xsl:output method="html" />
     
      <xsl:template match="/">
        <html>
          <head>
            <title>
              <xsl:value-of select="/myNS:Article/myNS:Title"/>
            </title>
     
            <style type="text/css">
              .myBox {margin:10px 155px 0 50px; border: 1px dotted #639ACE; padding:0 5px 0 5px;}
            </style>
          </head>
     
          <body>
            <p class="myBox">
              <span class="title">
                <xsl:value-of select="/myNS:Article/myNS:Title"/>
              </span> <br />
              Authors:   <br />
                <xsl:apply-templates select="/myNS:Article/myNS:Authors/myNS:Author"/>
              </p>
            <p class="myBox">
              <xsl:apply-templates select="//myNS:Body"/>
            </p>
          </body>
        </html>
      </xsl:template>
     
      <xsl:template match="myNS:Author">
         --   <xsl:value-of select="." />
     
        <xsl:if test="@company">
         ::   <b>  <xsl:value-of select="@company" />  </b>
        </xsl:if>
     
        <br />
      </xsl:template>
     
      <xsl:template match="myNS:Body">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
     
      <xsl:template match="@*|node()">
          <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
          </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>

    Le fichier HTML qui contient le javascript :

    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <html>
    <head>
    <title>Insert title here</title>
      <script>
    var xslStylesheet;
    var xsltProcessor = new XSLTProcessor();
    var myDOM;
     
    var xmlDoc;
     
    function Init(){
     
      // load the xslt file, example1.xsl
      var myXMLHTTPRequest = new XMLHttpRequest();
      myXMLHTTPRequest.open("GET", "model.xsl", false);
      myXMLHTTPRequest.send(null);
     
      xslStylesheet = myXMLHTTPRequest.responseXML;
      xsltProcessor.importStylesheet(xslStylesheet);
     
     
      // load the xml file, example1.xml
      myXMLHTTPRequest = new XMLHttpRequest();
      myXMLHTTPRequest.open("GET", "model.xml", false);
      myXMLHTTPRequest.send(null);
     
      xmlDoc = myXMLHTTPRequest.responseXML;
     
      var fragment = xsltProcessor.transformToFragment(xmlDoc, document);
     
      document.getElementById("example").innerHTML = "";
     
      myDOM = fragment;
      document.getElementById("example").appendChild(fragment);
    }
      </script>
    </head>
    <body onload="javascript:Init();">
     
    </body>
    </html>

    Merci de votre aide.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  4. #4
    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
    La page HTML chercher à placer le résultat de la transformation dans un élément avec un id valant "example". Il faut donc le rajouter pour que cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body onload="javascript:Init();">
     <div id="example"></div>
    </body>
    Tout ça n'est pas très propre... parce que le résultat a lui-même l'élément html comme racine !

    Ce code Javascript ne fonctionnera pas avec les anciennes versions d'Internet Explorer...
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  5. #5
    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 : 50
    Localisation : France, Gironde (Aquitaine)

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

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

    certes, le code n'est pas très propre, mais je n'ai pas de bonnes habitudes avec Javascript, ça viendra

    Sinon, l'extrait de code que tu m'a suggéré … ne semble pas fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body onload="javascript:Init();">
     <div id="example"></div>
    </body>
    puisque j'obtiens un résultat similaire au précédant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <html>
    <head>
    <title>Insert title here</title>
    <script>
    var xslStylesheet; var xsltProcessor = new XSLTProcessor(); var myDOM; var xmlDoc; function Init(){ // load the xslt file, example1.xsl var myXMLHTTPRequest = new XMLHttpRequest(); myXMLHTTPRequest.open("GET", "model.xsl", false); myXMLHTTPRequest.send(null); xslStylesheet = myXMLHTTPRequest.responseXML; xsltProcessor.importStylesheet(xslStylesheet); // load the xml file, example1.xml myXMLHTTPRequest = new XMLHttpRequest(); myXMLHTTPRequest.open("GET", "model.xml", false); myXMLHTTPRequest.send(null); xmlDoc = myXMLHTTPRequest.responseXML; var fragment = xsltProcessor.transformToFragment(xmlDoc, document); document.getElementById("example").innerHTML = ""; myDOM = fragment; document.getElementById("example").appendChild(fragment); }
    </script>
    </head>
    <body onload="javascript:Init();">
    <div id="example"/>
    </body>
    </html>
    Pour rappel, le code source de l'exemple se trouve sur la page Basic Example (le code source y est affiché plus clairement)
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  6. #6
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Comme dit plus haut très justement, il devrait marcher dans le sens que le rendrement apparemment s'est fait comme l'auteur voulu faire, au moins pour firefox ou chrome des versions plus ou moins à jour et avec une balise div d'id example ajoutée. Mais, il faut prendre conscience au faits que XSLTProcessor n'est pas tout à fait w3c conformant et il peut y avoir de nombreux comportements inattendus, d'après w3c recommendation, sans faire voir le résultat sorti.

    ... il y a un truc qui ne fonctionne pas. La transformation XSLT ne s'effectue pas.
    Si vous voulez tout à fait disperser le doute, vous pouvez ajouter quelques lignes pour debugger.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //etc etc
    var fragment = xsltProcessor.transformToFragment(xmlDoc, document);    //ligne 31
    var tdoc=xsltProcessor.transformToDocument(xmlDoc);
    var xmlSerializer=new XMLSerializer();
    console.log(xmlSerializer.serializeToString(tdoc));
    //etc etc
    Puis, vous faites inspecter le debugger console... (ou plus intrusif, alert() au lieu de console.log()).

Discussions similaires

  1. Comment vérifier et/ou modifier les paramètres de IE7 via Javascript
    Par droog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/11/2007, 11h50
  2. Réponses: 3
    Dernier message: 10/08/2007, 16h07
  3. [xslt]insérer javascript dans une feuille
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 15/11/2005, 13h27
  4. [WebForms][2.0]Accéder aux élément DropDownlist via Javascript
    Par steelidol dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 21/10/2005, 15h01
  5. Réponses: 6
    Dernier message: 04/07/2005, 11h32

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