468,532 Members | 1,704 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,532 developers. It's quick & easy.

XSLT - counting the number of xsl:if which are true...

OK, total newbie here, so this may be a mind-numbingly dumb question AND
I may be phrasing it badly.

I have an xsl:template which looks like this:

<xsl:template match="LoanRecord">
<hr>
<xsl:number count="LoanRecord" format="1"/><br/>
Loan ID:<xsl:value-of select="loan_no"> </xsl:value-of><br/>
Calculated CLTV:<xsl:value-of select="format-number (curr_balance div
orig_amount,'##%')"> </xsl:value-of>
<xsl:if test="(number(curr_balance div orig_amount) &gt; 0.8)">
<i> (High LTV)</i>
</xsl:if>
</hr>
</xsl:template>

In short, it prints some data from the input file, and calculates a
value, and, if that value is above a certain value, it also outputs a
warning message.

This works.

What I want, though, is to have several xsl:if statements in there, and,
at the end, to tally all those who evaluated to true. However, there
seems to be no way to easily keep a running count of things. I am slowly
begining to suspect this is by design. I am also aware I haven't fully
inhaled the full syntax and function library of xslt, much less grokked
all the cool things which can be done with it, so I am wondering if I
might be missing something. (I know I can easily count all the nodes
which meet a given condition; what I want to do is, within a record,
check for 'n' conditions and then count the total number of conditions
satisfied.)

Jul 20 '05 #1
3 3662
Have you tried <xsl:choose> ?

Lizard wrote:
OK, total newbie here, so this may be a mind-numbingly dumb question AND
I may be phrasing it badly.

I have an xsl:template which looks like this:

<xsl:template match="LoanRecord">
<hr>
<xsl:number count="LoanRecord" format="1"/><br/>
Loan ID:<xsl:value-of select="loan_no"> </xsl:value-of><br/>
Calculated CLTV:<xsl:value-of select="format-number
(curr_balance div orig_amount,'##%')"> </xsl:value-of>
<xsl:if test="(number(curr_balance div orig_amount) &gt; 0.8)">
<i> (High LTV)</i>
</xsl:if>
</hr>
</xsl:template>

In short, it prints some data from the input file, and calculates a
value, and, if that value is above a certain value, it also outputs a
warning message.

This works.

What I want, though, is to have several xsl:if statements in there, and,
at the end, to tally all those who evaluated to true. However, there
seems to be no way to easily keep a running count of things. I am slowly
begining to suspect this is by design. I am also aware I haven't fully
inhaled the full syntax and function library of xslt, much less grokked
all the cool things which can be done with it, so I am wondering if I
might be missing something. (I know I can easily count all the nodes
which meet a given condition; what I want to do is, within a record,
check for 'n' conditions and then count the total number of conditions
satisfied.)


Jul 20 '05 #2
What about this:

<xsl:variable name="vHits">
<xsl:if test="expression1">1</xsl:if>
<xsl:if test="expression2">1</xsl:if>
. . . . . . . . . .
<xsl:if test="expressionN">1</xsl:if>
</xsl:variable>

<xsl:variable name="vhitCount" select="string-length($vHits)"/>
=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
"Lizard" <li****@mrlizard.com> wrote in message
news:3F************@mrlizard.com...
OK, total newbie here, so this may be a mind-numbingly dumb question AND
I may be phrasing it badly.

I have an xsl:template which looks like this:

<xsl:template match="LoanRecord">
<hr>
<xsl:number count="LoanRecord" format="1"/><br/>
Loan ID:<xsl:value-of select="loan_no"> </xsl:value-of><br/>
Calculated CLTV:<xsl:value-of select="format-number (curr_balance div
orig_amount,'##%')"> </xsl:value-of>
<xsl:if test="(number(curr_balance div orig_amount) &gt; 0.8)">
<i> (High LTV)</i>
</xsl:if>
</hr>
</xsl:template>

In short, it prints some data from the input file, and calculates a
value, and, if that value is above a certain value, it also outputs a
warning message.

This works.

What I want, though, is to have several xsl:if statements in there, and,
at the end, to tally all those who evaluated to true. However, there
seems to be no way to easily keep a running count of things. I am slowly
begining to suspect this is by design. I am also aware I haven't fully
inhaled the full syntax and function library of xslt, much less grokked
all the cool things which can be done with it, so I am wondering if I
might be missing something. (I know I can easily count all the nodes
which meet a given condition; what I want to do is, within a record,
check for 'n' conditions and then count the total number of conditions
satisfied.)

Jul 20 '05 #3
Dimitre Novatchev wrote:
What about this:

<xsl:variable name="vHits">
<xsl:if test="expression1">1</xsl:if>
<xsl:if test="expression2">1</xsl:if>
. . . . . . . . . .
<xsl:if test="expressionN">1</xsl:if>
</xsl:variable>

<xsl:variable name="vhitCount" select="string-length($vHits)"/>

Looks interesting...I will try that. Thanks!

Jul 20 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Steven | last post: by
9 posts views Thread by Andrea Maschio | last post: by
3 posts views Thread by Eric Theil | last post: by
2 posts views Thread by websls | last post: by
1 post views Thread by Fred | last post: by
4 posts views Thread by Doulos05 | last post: by
3 posts views Thread by z1 | last post: by
reply views Thread by NPC403 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.