-
[XSLT] filtre
Bonjour tout le monde,
c toujours moi bloquée sur des problèmes de xsl:cry:
le problème cette fois :
je veux faire un filtre sur un fichier xml(je connait pas le contenu) et je je genere en sortie un autre fichier xml optimisé.
voila mon fichier:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="valeur" />
<xsl:param name="nomBalise" />
<xsl:param name="chemin" />
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:copy>
<xsl:copy-of select="//*[name()=$chemin][*[name()=$nomBalise]=$valeur]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
dans ce fichier je teste seulement si le contenu de la balise est egal a la valeur passé en parametre et ca marche
maintenant je veux tester aussi si le contenu de la balise CONTIENT la valeur.
aussi je veux tester pour les chiffres(valeur superieur ou inferieur)
je sais que je dois faire des if mais puisque je suis tres nule en xsl je ne sais pas comment faire.
je suis vraiment coincée.
merci pour votre aide
-
solution
Bonjour,
c'est toujours moi, mais cette fois-ci j'ai résolu le problème et je donne le résultat comme ça tout le monde et surtout les gens qui ont intérrésé regarde la solution
c'est un fichier qui applique des filtres sur n'importe quelle balise d'un ficier XML, il faut simplement lui passer en paramétres le nom de la balise, le chemin, la valeur qu'il faut filtrer et le type de champ(text ou number)
et pour les valeur numerique il faut donner aussi le signe(superieur, inferieur ou egal)
voilà le code:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dyn="http://exslt.org/dynamic">
<xsl:param name="valeur" />
<xsl:param name="nomBalise" />
<xsl:param name="chemin" />
<xsl:param name="type" />
<xsl:param name="signe" />
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
- <xsl:template match="/">
- <xsl:copy>
- <xsl:if test="$type = 'text'">
- <xsl:for-each select="//*[name()=$chemin][*[name()=$nomBalise]]">
<xsl:variable name="contenu" select="." />
- <xsl:if test="contains($contenu,$valeur)">
<xsl:copy-of select="." />
</xsl:if>
</xsl:for-each>
</xsl:if>
- <xsl:if test="$type = 'number'">
- <xsl:if test="$signe = 'superieur'">
<xsl:copy-of select="//*[name()=$chemin][*[name()=$nomBalise] > $valeur]" />
</xsl:if>
- <xsl:if test="$signe = 'inferieur'">
<xsl:copy-of select="//*[name()=$chemin][*[name()=$nomBalise] < $valeur]" />
</xsl:if>
- <xsl:if test="$signe = 'egale'">
<xsl:copy-of select="//*[name()=$chemin][*[name()=$nomBalise] = $valeur]" />
</xsl:if>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
merci et a la prochaine