Incrementing variable in xslt -
i have each loop , if condition under loop. want increment value of variable everytime if if condition true. based on value of variable i want implement logic. below code
<xsl:variable name="i" select="0"/> <xsl:for-each select="request/modifyproductsandpackages/nrclist/nrc"> <xsl:variable name="typeidnrcvar" select="typeidnrc"/> <xsl:if test="count(/request/waivenrclist/waivenrc/typeidnrc[text()=$typeidnrcvar])=0"> <xsl:variable name="i" select="$i + 1"/> <xsl:if test ="$i=1"> </xsl:if> </xsl:if> </xsl:for-each/>
here value of not incremented. can please suggest how should accomplish above task. help.
below xml structure
<request> <modifyproductsandpackages> <nrclist> <nrc> <typeidnrc>14046</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> <nrc> <typeidnrc>12002</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> <nrc> <typeidnrc>13006</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> <nrc> <typeidnrc>14098</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> </nrclist> </modifyproductsandpackages> <waivenrclist> <waivenrc> <typeidnrc>12002</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> </waivenrc> <waivenrc> <typeidnrc>13256</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> </waivenrc> <waivenrc> <typeidnrc>14046</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> </waivenrc> </waivenrclist> </request>
the end result want achieve nrclist = nrclist-waivenrclist. want exclude on matching records on basis of typeidnrc, serviceinternalid, serviceinternalidresets below result xml
<request> <nrclist> <nrc> <typeidnrc>13006</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> <nrc> <typeidnrc>14098</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> </nrclist> </request>
another approach:
here's example copies nrc
elements not have matching record in waivenrclist
- based on matching typeidnrc
:
xslt 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="waive" match="waivenrc" use="typeidnrc" /> <xsl:template match="/"> <request> <nrclist> <xsl:for-each select="request/modifyproductsandpackages/nrclist/nrc[not(key('waive', typeidnrc))]"> <xsl:copy-of select="."/> </xsl:for-each> </nrclist> </request> </xsl:template> </xsl:stylesheet>
applied input example, result is:
<?xml version="1.0" encoding="utf-8"?> <request> <nrclist> <nrc> <typeidnrc>13006</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> <nrc> <typeidnrc>14098</typeidnrc> <serviceinternalid>98602440</serviceinternalid> <serviceinternalidresets>0</serviceinternalidresets> <viewableonly>1</viewableonly> </nrc> </nrclist> </request>
Comments
Post a Comment