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 :

[XSL] Filtre sur plusieurs champs par variable


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut [XSL] Filtre sur plusieurs champs par variable
    Messieurs Dames, bien le bonjour.

    Je viens de rencontrer un problème sur une génération de fichier à partir de XSL, sachant que je ne peux pas influer sur la structure des données (je le regrette... )

    Bref, après avoir tourné mon problème dans tous les sens, ma solution serait de pouvoir appliquer un filtre que je construit sur une liste de nœuds.
    Reste à savoir si c'est possible, et c'est là que vous intervenez !

    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
     
    <xsl:template name="MonTemplate">
    	<xsl:param name="laReference"/>
    	<xsl:param name="laRupture"/>
     
    	<xsl:variable name="lOrdreMax" select="$laRupture/vol_ordre"/>
    	<xsl:variable name="leFiltre">
    		<xsl:for-each select="/ruptures">
    			<xsl:if test="./vol_ordre &lt;= $lOrdreMax">
    				<xsl:variable name="laClef" select="./vol_clef"/>
    				[<xsl:value-of select="$laClef"/>='<xsl:value-of select="$laReference/*[name() = $laClef]"/>']
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:variable>
    	<xsl:variable name="lesLignes" select="$lignes $leFiltre" />
    	<xsl:value-of select="$lesLignes"/>
    (...)
    </xsl:template>
    Synthèse :
    La variable "leFiltre" est construite dynamiquement et ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [champ1=truc][champ2=machin]
    avec un nombre de critères dynamique.
    Mon souci : filtrer les nœuds compris dans "$lignes" (déclaré ailleurs) suivant ce filtre (j'ai mis n'importe quoi dans le code ci-dessus...).

    Mes questions :
    Est-ce possible ?
    Si oui, comment ?

    Merci pour toute piste de résolution et bonne journée à vous.

    G.

  2. #2
    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
    On ne peut pas faire reconstruire un ensemble de noeuds à partir des parties provenant des variables comme ça sans appeler à aide les extensions xslt. Mais une extension par nature dépend de réalisation individue.

    [1] Xalan-J
    Il supporte son extension xalan:evaluate() quoique désapprouvé en faveur de fonction le même nom evaluate() de exslt-dynamique. Mais la support est built-in donc est rendue plus commode. On peut le faire comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0"
        xmlns:xalan="http://xml.apache.org/xalan"
        extension-element-prefixes="xalan"
        exclude-result-prefixes="xalan"
    >
        <!-- etc etc... -->
        <xsl:variable name="lesLignes" select="xalan:evaluate(concat($lignes,$leFiltre))" />
        <!-- etc etc... -->
    </xsl:stylesheet>
    Ou bien sans rien faire d'autre, directement comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0"
        xmlns:dyn="http://esxlt.org/dynamic"
        extension-element-prefixes="dyn"
        exclude-result-prefixes="dyn"
    >
        <!-- etc etc... -->
        <xsl:variable name="lesLignes" select="dyn:evaluate(concat($lignes,$leFiltre))" />
        <!-- etc etc... -->
    </xsl:stylesheet>
    [2] Saxon
    Il supporte son propre extension de même nom. Il suffit de change de l'espace de nom à ceci et le prefixe (arbitraire, c'est vrai, mais usuel) avec.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        xmlns:saxon="http://saxon.sf.net/"
    Si tout ça n'est pas encore très clair, il suffit de faire une recherche google pour remplir des lacunes.

Discussions similaires

  1. [WD17] Filtre sur plusieurs champs
    Par Sannazzarotiti dans le forum WinDev
    Réponses: 6
    Dernier message: 18/06/2013, 16h11
  2. Remplacer NULL par O sur plusieurs champs
    Par fpouget dans le forum Développement de jobs
    Réponses: 9
    Dernier message: 18/12/2012, 16h28
  3. Réponses: 1
    Dernier message: 26/08/2011, 15h24
  4. filtre sur plusieurs champs
    Par sebgaillard dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/09/2009, 17h13
  5. Filtres sur plusieurs champs/criteres en meme temps
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 35
    Dernier message: 26/03/2008, 14h23

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