[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:
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:
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.