xsl-list
[Top] [All Lists]

RE: [xsl] Unique node and delimiter concatenation

2007-03-29 14:56:15
Senthil,

One thing I can tell you is your test condition is not correct.
Use  
<xsl:if test="position() &lt; last()-1 and $warn='Y'">
Instead of

<xsl:if test="position() &lt; last()-1 and test=$warn='Y'">

Please note that you don't need to repeat the "test =" clause for a
Boolean condition, just use the correct parenthesis with Boolean AND or
OR conditions with in the same "test" clause.

This change at more then one place in your code is giving the output as
"1 and" since your logic is not correct.
Please check your logic, the last node set of the LINE_ITEM got the
CUST_MSG as "N" that's why the PRODUCT_NUMBER "2" in it is not getting
printed.
Good luck,
Sreeni

-----Original Message-----
From: Senthilkumaravelan K [mailto:skumaravelan(_at_)googlemail(_dot_)com] 
Sent: Thursday, March 29, 2007 2:20 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Unique node and delimiter concatenation

Hi ,
I getting struck with border condition in the below xslt when i am
trying to concatenate with "," "and " while finding unique node based on
the condition.
Can any one suggest me how I could over come this ?

My xml looks like
<LINE_ITEMS>
<LINE_ITEM>
<PRODUCT_NUMBER>1</PRODUCT_NUMBER>
<CUST_MSG>Y</CUST_MSG>
</LINE_ITEM>
<LINE_ITEM>
<PRODUCT_NUMBER>1</PRODUCT_NUMBER>
<CUST_MSG>Y</CUST_MSG>
</LINE_ITEM>
<LINE_ITEM>
<PRODUCT_NUMBER>1</PRODUCT_NUMBER>
<CUST_MSG>Y</CUST_MSG>
</LINE_ITEM>
<LINE_ITEM>
<PRODUCT_NUMBER>2</PRODUCT_NUMBER>
<CUST_MSG>N</CUST_MSG>
</LINE_ITEM>
</LINE_ITEMS>
and
my XSLT the same
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="html" />
<xsl:key name="getUniqueData" match="PRODUCT_NUMBER" use="."/>
<xsl:template match="/"> <xsl:variable name="itemsOfthisProduct"
select="//LINE_ITEM"/> <products> <xsl:for-each
select="$itemsOfthisProduct/PRODUCT_NUMBER[generate-id()
= generate-id(key('getUniqueData',.))]">
<xsl:variable name="warn"
select="following-sibling::*[contains(name(), 'CUST_MSG')]"  /> <xsl:if
test="$warn='Y'"> <xsl:value-of select="."/> </xsl:if> <xsl:if
test="position() &lt; last()-1 and test=$warn='Y'"> <xsl:message>less
than</xsl:message> <xsl:text>, </xsl:text></xsl:if> <xsl:if
test="position()=last()-1 and test=$warn='Y'"><xsl:text>and
</xsl:text></xsl:if> <xsl:if test="position()=last() and
test=$warn='Y'"><xsl:text>.</xsl:text>
</xsl:if>
 </xsl:for-each>
</products>
</xsl:template>
</xsl:stylesheet>

My expected out is
<products>1 and 2.
depends on the CUST_MSG value I need to concatenate "," and respective
locations.

Am facing some border condition it is failing to produce the desired
output.
Please help.
Regards,
Senthil

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>