[XSLT] XSLT et formulaires HTML

Bonjour tout le monde,

Voilà mon problème. J'ai un fichier XML, qui fait appel à un fichier xsl pour sa mise en page.
Le fichier XSL affiche un formulaire donc le contenu est décrit par le fichier XML. A la fin de ce formulaire, j'ai un bouton submit.
Je souhaite mettre à jour mon fichier XML en fonction de ce que l'utilisateur aura rempli, mais sans passer par ASP, PHP... Est-il possible, comme je souhaite simplement réécrire un fichier XML, de lancer une action XSL à partir de mon bouton submit ?
Merci pour votre aide
Bobby

5 réponses

  1. Bonjour,
    tu peux t'inspirer de ceci :

    liste.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="affiche.xsl"?> 
    <list>
    <regle numero="1" nom="Hypallage">
    <description>transfert d'adjectif en vue d'attribuer à certains mots d'une phrase ce qui convient à d'autre mots de la même phrase.</description>
    </regle>
    <regle numero="2" nom="Epanaphore">
    <description>Repetition d'un mot avec une conjonction</description>
    </regle>
    <regle numero="3" nom="Epanalepse">
    <description>le même mot est en tête et en fin d'une phrase</description>
    </regle>
    </list>
    


    liste.xsl
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    
    <xsl:param name="numero"/>
    
    <xsl:template match="list">
    <xsl:variable name="nombre">
    <xsl:value-of select="count(//regle[@numero=$numero])"/>
    </xsl:variable>
    
    <xsl:choose>
    <xsl:when test="$nombre>=1">
    <xsl:apply-templates select="//regle[@numero=$numero]"/>
    </xsl:when>
    <xsl:otherwise>
    <div>il n'y a aucune règle répondant au critère sélectionné</div>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:template>
    
    <xsl:template match="regle">
    <div style="color:white;font-size:150%;margin-left:20px"><xsl:value-of select="@nom"/></div>
    <xsl:apply-templates/>
    </xsl:template>
    
    </xsl:stylesheet>
    
    


    affiche.xsl
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">
    
    <xsl:template match="/">
    <html>
    <head>
    <title>Moteur de recherche</title>
    <style type="text/css">
    <![CDATA[
    body {
    background:black;
    }
    form {
    margin-left:150px;
    }
    input.si {
    background:orange;
    width:200px;
    font-family:verdana;
    color:black;
    padding:10px;
    }
    input.butt {
    background:whitesmoke;
    font-family:verdana;
    color:gray;
    border:0px;
    margin-left:5px;
    }
    .nf {
    color:orange;
    font-family:verdana;
    font-size:27px;
    padding:10px;
    }
    ]]>
    </style>
    
    <script src="recherche.js" type="text/javascript"></script>
    </head>
    
    <body>
    <h1 style="text-align:center; color:orange">Kezako this !!</h1>
    <hr style="color:white" />
    
    <form name="form1">
    <span style="color:whitesmoke;font:17px/14px verdana;">le nombre de mots est :<xsl:value-of select="count(//regle)" /></span><xsl:text> </xsl:text>
    <input class="si" name="code" type="text" />
    <input class="butt" name="button" type="button" onClick="recherche()" value="Recherche" />
    </form>
     
    <div id="nfig" class="nf"></div>
    </body>
    </html>
    </xsl:template>
    
    </xsl:stylesheet>
    
    
    


    recherche.js
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
    
    xslDoc.async = false;
    xslDoc.load("liste.xsl"); 
    
    xmlDoc.validateOnParse = false;
    xmlDoc.load("liste.xml");
    
    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
    xslt.stylesheet = xslDoc;
    var xslProc = xslt.createProcessor();
    xslProc.input = xmlDoc;
    
    function recherche() 
    {
    xslProc.addParameter("numero", form1.code.value);
    xslProc.transform();
    nfig.innerHTML = xslProc.output;
    }
    


    bon codage @+
    5
    1. j'pense que ça doit etre possible avec un lien en javascript sur ton boutton de submit ... je m'explique :
      au lieu du
      <input type="submit" value="OK">
      

      tu mets un
      <input type="button" onClick="javascript:goXSL()" value="OK">
      

      avec au préalable dans ton <head>, biensur un
      <script language="javascript>
      function goXSL()
      {
          //Algo style :
          Ouvrir une fenetre en poup
          Le docuemnt appelé dans la fentre st ton xsl avec des parametres
          Application du xsl (donc changement du xml )
          faire un refresh sur la fenetre parent (parent.window.reload() )pour l'affichage de la mofification
         //FIN Algo style
      }
      </script>
      

      Oué je te mets ça en algo , la j'ai pas le temps de le faire à la mimine la...

      en gros c'est ça que tu voulais non ?!

      Zep3k!GnO
      _/______________________________\_
      /On est des rangers mec, des rangers !\
      \_____________..._________________/
      0
      1. Ca correspond effectivement à ce que je souhaite faire... mais comment passes-tu les paramètres du formulaire au fichier xsl ?
        Merci en tout cas pour ton coup de main
        0
        1. mais comment passes-tu les paramètres du formulaire au fichier xsl ?
          Oula c'est la que c'est le bordel :
          Pour moi, il faudrait que tu fasse un feuillet xsl avec la fonction à appeller avec les paramètres que t'inclus dans ta feuille xsl principale.
          Et ton feuillet xsl avec ta fonction et ses paramètres, tu le créé à la volé, dynamiquement avec Php . . .

          voilà dans l'esprit , après en pratique, j'avoue c'est cossu !

          bon courage . . .

          Zep3k!GnO
          _/______________________________\_
          /On est des rangers mec, des rangers !\
          \_____________..._________________/
          0
          1. Salut bobby, je voulais te demander si tu avais réussi ton projet car je travaille sur un projet similaire, et si tu as trouvé la solution, ca m'aiderait énormément, merci
            0