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 :

Peut-on variabiliser l'attribut "@*"


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Points : 277
    Points
    277
    Par défaut Peut-on variabiliser l'attribut "@*"
    Bonjour,

    J'ai un fichier XML qui se présente sous la forme suivante :
    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
     
    <Root>
        <Vagues>
            <Vague Id=1 ...>
                <kpi ca=100 qte=5/>
            </Vague>
            <Vague Id=2 ...>
                <kpi ca=100 qte=5/>
            </Vague>
            ...
            <Vague Id=n ...>
                <kpi ca=100 qte=5/>
            </Vague>
        </Vagues>
    </Root>
    Sur base de ce fichier XML, je veux créer un template XSL qui me permet d'afficher X tableaux :
    1. Vision de toutes les vagues
    2. Vague 1
    3. Vague 2
    ...
    N. Vague N

    Pour ça, j'ai créé un template de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:template name="DetailVague">
        <xsl:param name="pVagueId" select="0"/>
     
        <xsl:variable name="vCA" select="sum(/Root/Vagues/Vague[@Id=$pVagueId]/kpi/@ca)"/>
    </xsl:template>
    Ce que je voudrais c'est passer dans pVagueId :
    - Soit "Toutes" pour avoir le CA de toutes mes vagues, quel que soit l'id
    En gros, avoir [@Id=@*]
    - Soit une vague pour avoir le CA de celle-ci uniquement, c'est-à-dire un id donné
    En gros, avoir [@Id=1]

    Mon problème, c'est que je ne parviens pas à variabiliser le @*... J'ai écrit l'instruction ci-dessous, mais ça ne fonctionne pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	<xsl:variable name="vSelectionVague">
    		<xsl:choose>
    			<xsl:when test="$pVagueId='Toutes'">
    				@*
    			</xsl:when>
    			<xsl:otherwise>
    				<xsl:value-of select="$pVagueId"/>
    			</xsl:otherwise>
    		</xsl:choose>
    	</xsl:variable>
     
    	<xsl:variable name="vCA" select="sum(/Root/Vagues/Vague[@Id=$vSelectionVague]/kpi/@ca)"/>
    J'ai également essayé de la mofier avec des "{ }" ou des "[ ]" mais rien n'y fait...

    Est-ce que qqn aurait une idée pour me débloquer svp ?

    Vous remerciant par avance pour votre aide.

  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
    [0] Ce n'est pas tout à fait clair ce que vous entendez par @* ! Peut-être vous l'entendiez par être de valeur quelconque arbitraire pour @Id ... ? c'est pas du tout cela. Grosso mode, @* ne veut dire qu'un attribut de n'importe quel nom.

    [1] En xslt 1.0, le plus simple est de sortie directement la somme, étant une valeur atomique. Si vous voulez garder les deux variables, c'est fait comme ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        <xsl:variable name="vSelectionVague">
            <xsl:choose>
                <xsl:when test="$pVagueId='Toutes'">
                    <xsl:value-of select="sum(/Root/Vagues/Vague/kpi/@ca)" />
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="sum(/Root/Vagues/Vague[@Id=$pVagueId]/kpi/@ca)"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="vCA" select="$vSelectionVague"/>

    [2] En xslt 2.0, on travaille avec les données multiples plus aisément avec le type de donnée dit séquence, on peut faire comme ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        <xsl:variable name="vSelectionVague">
            <xsl:choose>
                <xsl:when test="$pVagueId='Toutes'">
                    <xsl:sequence select="for $node in /Root/Vagues/Vague/@Id return $node" />
                </xsl:when>
                <xsl:otherwise>
                    <xsl:sequence select="$pVagueId" />
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="vCA" select="sum(/Root/Vagues/Vague[@Id=($vSelectionVague)]/kpi/@ca)"/>

    Voilà !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Points : 277
    Points
    277
    Par défaut
    Bonjour tsuji,

    Et merci pour votre réponse.

    Comme j'ai beaucoup de variables, j'avais "exclu" la solution [1] car c'était assez lourd à m'être en oeuvre.
    N'étant pas très initié en XSL, je ne connaissais pas la solution [2]. Je vais essayer et voir ce que ça donne. Je vous dirais ce qu'il en est une fois testé.

    En tout cas, merci pour votre réponse.

Discussions similaires

  1. MessageFormat : peut-on ne pas doubler les quotes ?
    Par PoichOU dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/12/2008, 22h25
  2. [C#] Peut-on dériver un attribut static ?
    Par 5:35pm dans le forum C#
    Réponses: 2
    Dernier message: 16/05/2006, 01h12
  3. ne peut pas simplement "aXSLProc.Process(aCursor);"
    Par didier.cabale dans le forum XMLRAD
    Réponses: 16
    Dernier message: 08/03/2006, 12h25
  4. Réponses: 2
    Dernier message: 27/03/2005, 16h09

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