Subject: RE: [xsl] Unique node and delimiter concatenation From: "Sreeni Yetchina -X \(syetchin - Pure Solutions at Cisco\)" <syetchin@xxxxxxxxx> Date: Thu, 29 Mar 2007 14:54:51 -0700 |
Senthil, One thing I can tell you is your test condition is not correct. Use <xsl:if test="position() < last()-1 and $warn='Y'"> Instead of <xsl:if test="position() < 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@xxxxxxxxxxxxxx] Sent: Thursday, March 29, 2007 2:20 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx 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() < 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Unique node and delimiter con, Senthilkumaravelan K | Thread | [xsl] Re: Unique node and delimiter, Senthilkumaravelan K |
RE: [xsl] concatenate multiple attr, Shaikh, Parvez | Date | RE: [xsl] concatenate multiple attr, Michael Kay |
Month |