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

JavaScript Discussion :

[JavaScript - XML/XSL] fonction et filtre


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut [JavaScript - XML/XSL] fonction et filtre
    Bonsoir à tous et toutes,

    Voilà mon petit problème, j'ai un fichier xml contenant des produits avec différentes attributs, l'idée est d'avoir une page html avec un field dans lequel on entre une valeur qui pourra permettre de filtrer les produits, donc suivant une occurrence d'attribut définie par le field. Le problème c'est que j'ai l'impression que la variable n'est pas passée depuis le .html vers le .xsl dans lequel j'utilise le contenu de la variable, du moins c'est mon idée. Si vous voulez regarder par vous-même :
    Fichier html avec 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
    44
    45
    46
    47
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Liste des produits par niveau de réapprovisionnement</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="JavaScript" type="text/JavaScript">
    function lister(niv)
    {
    			// On charge la feuille XSL
                var feuilleXsl = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0"); 
                feuilleXsl.async = false; 
                feuilleXsl.load("styleProd.xsl"); 
     
    			// On charge le document XML
                var docXml = new ActiveXObject("Msxml2.DOMDocument.4.0"); 
                docXml.async = false; 
                docXml.load("Produits.xml"); 
     
    			// On transforme
                var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0"); 
                xslt.stylesheet = feuilleXsl; 
                var procXsl; 
                // On crée un processeur xslt
                procXsl = xslt.createProcessor(); 
                //On lui soumet le doc xml
                procXsl.input = docXml; 
                //traitement
                procXsl.addParameter('niveau', niv);
                procXsl.transform(); 
                //On récupère la sortie du traitement
    			var resultat = procXsl.output;
    			var entete = 'Saisir un autre niveau<br /><form name="formulaire"><input name="niv" type="text"><br /><input type="button" name="recherche" value="Recherche" onClick="lister(this.formulaire.niv.value)"></form>';
    			//Affichage du résultat
                 document.body.innerHTML = entete + resultat;
     
    }
    </script>
    </head>
     
    <body>
        <font face="Comic sans ms" size="3">Entrez un niveau de réapprovisionnement</font><br />
        <form name="formulaire">
            <input name="niv" type="text"><br />
            <input type="button" name="recherche" value="Recherche" onClick="lister(this.formulaire.niv.value)">
        </form>
    </body>
    </html>
    Le fichier 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <!--<xsl:param name='niveau'>25</xsl:param>-->
    <xsl:template match="/">
     
    <html>
    <head>
     <style type="text/css">
              table { border-collapse: collapse;
              border: solid black 1px;
              margin-left:150px;}
              td { padding: 3px;
              border: solid black 1px;}
              th { padding: 3px;
              border: solid black 2px;}
    </style>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
     
    </head>
     
    <body>
            <p align="center">
              <font size="4" face="Imprint MT Shadow">Liste filtrée</font>
            </p>
            <table width="800px">
              <TR>
    			<TH> Position </TH>
                <TH> Référence </TH>
                <TH> Libellé </TH>
                <TH> N° fournisseur </TH>
                <TH> Catégorie </TH>
                <TH> Quantité/unité </TH>
                <TH> Prix unitaire </TH>
                <TH> Stock </TH>
                <TH> Unités commandées </TH>
                <TH> Niveau réapprovisionnement </TH>
                <TH> Indisponible </TH>
              </TR>
              <xsl:element name="p"><xsl:value-of select= '$niveau' /></xsl:element>
                 <xsl:for-each select="dataroot/Produits[Niveau_de_réapprovisionnement=$niveau]"> 
                     <xsl:sort select="Nom_du_produit" 
                              data-type="text" 
                              order="ascending"/>
     
                <tr>
    			  <td width="25%" size="12px">
                    *<xsl:number value="position()" format="1. "/>
                  </td> 
                  <td width="25%" size="12px">
                    *<xsl:value-of select="Réf_produit"/>
                  </td>
                  <td width="25%" size="12px">
                    *<xsl:value-of select="Nom_du_produit"/>
                  </td>
                  <td width="25%" size="12px" align="center">
                    *<xsl:value-of select="N_fournisseur"/>
                  </td>
                  <td width="25%" size="12px" align="center">
                    *<xsl:value-of select="Code_catégorie"/>
                  </td>
                  <td width="25%" size="12px">
                    *<xsl:value-of select="Quantité_par_unité"/>
                  </td>
                  <td width="25%" size="12px">
                    *<xsl:value-of select="Prix_unitaire"/>
                  </td>
                  <td width="25%" size="12px">
                    *<xsl:value-of select="Unités_en_stock"/>
                  </td>
                  <td width="25%" size="12px" align="center">
                    *<xsl:value-of select="Unités_commandées"/>
                  </td>
                  <td width="25%" size="12px" align="center">
                    *<xsl:value-of select="Niveau_de_réapprovisionnement"/>
                  </td>
                  <td width="25%" size="12px" align="center">
                    *<xsl:value-of select="Indisponible"/>
                  </td>
                </tr>
     
              </xsl:for-each>
            </table>
          </body>
        </html>
      </xsl:template>
     
    </xsl:stylesheet>
    J'ai déjà essayer pas mal de choses avec ça mais rien n'y fait. Lorsque j'entre une valeur pour la variable utilisée dans le xsl, lorsque j'ouvre le .xml nickel j'ai la liste filtrée...
    Merci d'avance pour votre aide,
    Arkh.

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <!--<xsl:param name='niveau'>25</xsl:param>-->
    Donc si tu mets en commentaires la définition du paramètre, il ne va pas pouvoir l'injecter. Décommente. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:param name='niveau' />

    ERE

  3. #3
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Merci pour ton conseil, j'ai remplacé mais cela ne fonctionne toujours pas. Quelque chose bloque mais je n'arrive pas à trouver quoi :/

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    Tu peux faire un zip avec tes fichiers et un jeu de données ?

    ERE

  5. #5
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut re
    Bien sûr! Le voici.
    Merci pour le temps investit, même si ça n'a pas l'air de grand chose
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="button" name="recherche" value="Recherche" onClick="lister(this.formulaire.niv.value)">
    est erroné, il faut mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="button" name="recherche" value="Recherche"
     onClick="lister(this.form.niv.value)">
    Et tout rentre dans l'ordre !

    ERE

  7. #7
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Je viens de modifier suivant ton conseil mais cela ne fonctionne pas :s Es-tu sûr de n'avoir modifié que cette instruction? :o
    J'utilise IE pour tester.

  8. #8
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    1. Ton code marche uniquement pour IE
    2. Je te confirme avoir le tableau affiché et filtré sans aucun souci


    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Liste des produits par niveau de réapprovisionnement</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="JavaScript" type="text/JavaScript">
    function lister(niv)
    {
    			// On charge la feuille XSL
                var feuilleXsl = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0"); 
                feuilleXsl.async = false; 
                feuilleXsl.load("styleProd.xsl"); 
     
    			// On charge le document XML
                var docXml = new ActiveXObject("Msxml2.DOMDocument.4.0"); 
                docXml.async = false; 
                docXml.load("Produits.xml"); 
     
    			// On transforme
                var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0"); 
                xslt.stylesheet = feuilleXsl; 
                var procXsl; 
                // On crée un processeur xslt
                procXsl = xslt.createProcessor(); 
                //On lui soumet le doc xml
                procXsl.input = docXml; 
                //traitement
                procXsl.addParameter('niveau', niv);
                procXsl.transform(); 
                //On récupère la sortie du traitement
    			var resultat = procXsl.output;
    			var entete = 'Saisir un autre niveau<br /><form name="formulaire"><input name="niv" type="text"><br /><input type="button" name="recherche" value="Recherche" onClick="lister(this.form.niv.value)"></form>';
    			//Affichage du résultat
                 document.body.innerHTML = entete + resultat;
     
    }
    </script>
    </head>
     
    <body>
        <font face="Comic sans ms" size="3">Entrez un niveau de réapprovisionnement</font><br />
        <form name="formulaire">
            <input name="niv" type="text"><br />
            <input type="button" name="recherche" value="Recherche" onClick="lister(this.form.niv.value)">
        </form>
    </body>
    </html>



    ERE

  9. #9
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Je vois, cela doit alors provenir de ma version de IE, comme je ne l'utilise jamais, il n'a jamais eu l'occasion d'être mis à jour, ça ne peut être que cela ^^"
    Je rentre chez moi et je testerai ^^

    En tout cas, merci beaucoup pour ton aide l'ami!

  10. #10
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Peut-être pas ta version d'IE mais ta version de MSXML installée.

    ERE

  11. #11
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Voilà, j'ai télécharger la dernière version de MSXML, IE était bien à jour vu que j'ai Windows 7.
    J'ai testé le mode de débogage de IE pour voir ce qu'il sortait (voir attaché) et il pointait du doigt la ligne suivante de la page html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var feuilleXsl = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
    Images attachées Images attachées  

  12. #12
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Certainement un problème de sécurité au niveau de ton navigateur. Baisse le niveau de sécurité et autorise les activex.

    ERE

  13. #13
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Rah même ça ... J'ai mit les paramètres de sécurité au minimum et activer les scripts, les options d'ActiveX. Rien à faire =/

  14. #14
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Regarde dans ta base des registres si tu as bine cette clé:

    HKEY_CLASSES_ROOT\Msxml2.FreeThreadedDOMDocument.4.0

    ERE

  15. #15
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Non, je ne l'ai pas trouvé :
    Images attachées Images attachées  

  16. #16
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Si tu n'as pas cette clé c'est que ta version de msxml n'est pas celle requise pour exécuter ton code. Regarde si tu n'as pas une autre version et si c'est le cas modifie ta ligne new ActiveXObject(....)

    ERE

  17. #17
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    J'ai pu l'essayer sur un autre pc, il fonctionne très bien (et tant mieux)!!
    Merci beaucoup pour ton aide l'ami =)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/07/2007, 09h27
  2. Javascript XML XSL
    Par bewonder dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/01/2007, 16h30
  3. XML - XSL et Javascript
    Par tiboel dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/03/2006, 12h50
  4. [Xml/XSl] utiliser des fonction vb
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/01/2006, 17h28
  5. [XML][XSL][DOM][JAVASCRIPT]melanger le tout, laisser reposer
    Par mitsein dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/07/2004, 16h56

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