2010-06-04 7 views
0

je un élément XML qui ressemble à quelque chose comme:XSL: Est-ce tout élément ayant une valeur de n

<account year="2010"> 
    <paymentDue> 
     <amount>0</amount> 
    </paymentDue> 
    <paymentDue> 
     <amount>752.00</amount> 
    </paymentDue> 
</account> 

J'affiche les comptes regroupés par année et j'utilise la méthode <xsl:choose> pour dire si le montant > 0, affiche un lien de paiement. Cependant, je ne peux y arriver que par paiement. Je souhaite afficher le lien de paiement pour l'année si TOUTES les sommes dues sont supérieures à 0.

Toute contribution sur la façon d'accomplir ceci serait appréciée.

+0

Vous devriez publier votre code XSLT, dépouillé à la partie pertinente (!). Sinon, il est plutôt difficile de dire ce que vous faites mal. – Tomalak

Répondre

3

Comme ça?

<xsl:template match="account"> 
    <xsl:if test="paymentDue[number(amount) &gt; 0]"> 
    <!-- display payment link --> 
    </xsl:if> 
</xsl:template> 

L'expression XPath paymentDue[number(amount) &gt; 0] sélectionne un noeud quelconque <paymentDue> dont <amount> est supérieur à 0. Le test <xsl:if> réussit lorsque cela se traduit par un ensemble de nœuds non vide (quand il y a au moins un noeud qui remplit la condition).

+0

Cela fait exactement ce dont j'ai besoin. Je vous remercie. Je n'ai pas posté mon code XSLT car il n'y avait rien à publier. Bien que j'utilise XSLT depuis plusieurs années, c'est le premier projet où je l'ai beaucoup utilisé et j'apprends beaucoup sur XPath, etc. en cours de route. J'apprécie ton aide! – Robert

1

Essayez ceci:

account[paymentDue/amount[text() > 0]] 

C'est, « Obtenez tous les nœuds de compte qui ont au moins un noeud de paiement qui a au moins un noeud montant où le texte est supérieur à 0 ».

N'attrape pas les erreurs, par exemple si vous avez des valeurs non numériques, mais c'est un début.

+0

Vous devrez utiliser '>', pas '>'. Ou, mieux encore, '! =', Tant que cela est approprié. –

+0

Vous avez absolument raison. Merci pour la correction à ce sujet. –

+0

@ Robert-Rossney: La déclaration dans votre commentaire ci-dessus est fausse. Non seulement '>' * peut * être utilisé, mais il est plus lisible et doit être préféré! S'il vous plaît, pensez à modifier ou supprimer votre commentaire! –

Questions connexes