[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Variable access

Subject: RE: Variable access
From: "James Fuller" <james.fuller@xxxxxxxxxx>
Date: Fri, 20 Sep 2002 11:49:29 +0100
access variable from xsl text
>  I have a small problem with variable scope.
>  I would like to declare a variable and store the "Cleared" action in the
> <for-each> iteration, and then I have to access it again after
> the loop ends
> (It would be even more nice if I could break the loop on encountering the
> 'Cleared' text) to do some processing based on the status of the
> action. Can
> anyone help me with this?

Hello,

well your main problem, is that you are applying techniques which probably
could be considered bad habit in the xslt world....as always there are
better ways of doing these, its just that you may have to change your
approach


>  Solution needed asap.
>
>   <xsl:template name="Call_ClearedBySystemMapped">
>     <xsl:for-each select="MsgLevel/OIDInfo/OIDMapping">
>       <xsl:if test="ActionString='Cleared'">
> 	<!-- Store the cleared variable here -->
>       </xsl:if>
>     </xsl:for-each>

ok so essentially you want to go through a bunch of elements and 'raise a
generic flag' if some condition is met.

then after this processing, the flag being raised should result in some form
of processing as attributed to your xsl:choose statement.

first step is first why do you have an xsl:for-each ?

do a matching template on your data....dont make a named function first !
something like the following

<xsl:template select="MsgLevel/OIDInfo/OIDMapping">
<xsl:if test="ActionString='Cleared'">

.....ok do something

</xsl:if>
</xsl:template>

>     <!-- Access the variable here -->
>     <xsl:choose>
>       <xsl:when test="$Action='Cleared'">
>       <xsl:text> YES and process related </xsl:text>
>       </xsl:when>
>       <xsl:otherwise>
>       <xsl:text> NO and do process related </xsl:text>
>       </xsl:otherwise>
>     </xsl:choose>
>   </xsl:template>

now you could recurse here and call yet another template and yes even a
named template passing a param might be useful...but without seeing all of
your problem....I would then do the processing you desire; which doesnt
require yet another test as in an xsl:choose.

<xsl:template select="MsgLevel/OIDInfo/OIDMapping">
<xsl:if test="ActionString='Cleared'">
            <xsl:text> YES and process related </xsl:text>
</xsl:if>
</xsl:template>

of course if u wanted to handle both conditions you can use an xsl:choose

<xsl:template select="MsgLevel/OIDInfo/OIDMapping">
<xsl:choose>
<xsl:when test="ActionString='Cleared'">
            <xsl:text> YES and process related </xsl:text>
</xsl:when>
<xsl:otherwise>
NO some default processing
</xsl:otherwise>
</xsl:choose>
</xsl:template>


now why didnt your approach work ?

- the scope of your variable was not appropriate..u could have called a
named template from within your xsl:if condition and passed it a
parameter...but once again this is awkward xslt thinking

- you are using techniques which wont get u too far in xslt world.

gl, jim fuller



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.