xslt - adding Lp. to node -
i'm new in xslt, i've problems adding lp transformation.
this's simple xml data:
<booking> <bookingid>ww1</bookingid> <vouchernumber>r-108</vouchernumber> </booking> <booking> <bookingid>ww2</bookingid> <vouchernumber>r-108</vouchernumber> </booking> <booking> <bookingid>ww3</bookingid> <vouchernumber>r-108</vouchernumber> </booking> <booking> <bookingid>ww4</bookingid> <vouchernumber>r-109</vouchernumber> </booking> <booking> <bookingid>ww5</bookingid> <vouchernumber>r-109</vouchernumber> </booking> <booking> <bookingid>ww6</bookingid> <vouchernumber>r-110</vouchernumber> </booking> the key vouchernumber, need add lp same vouchernumber i'need output text file this:
id;vn,lp ww1;108;1 ww2;108;2 ww3;108;3 ww4;109;1 ww5;109;2 ww6;110;1 i add key on vouchernumber
<xsl:key name="x" match="booking" use="vouchernumber"/> in for-each statement i've add code: it's adding me on last position (i know can change position) number of count items same vouchernumber, how can add number lp other items?
<xsl:choose> <xsl:when test="generate-id(.) =generate-id(key('x',vouchernumber)[last()])"> <xsl:value-of select="count(key('x',vouchernumber)) "/> </xsl:when> <xsl:otherwise> -- need lp other items -- </xsl:otherwise> </xsl:choose> i can use version 1.0 of xslt stylesheet. thank advice best regards
it looks trying use muenchian grouping here, should start off selected booking elements first occurrence of each distinct vouchernumber
<xsl:for-each select="booking[generate-id() = generate-id(key('x',vouchernumber)[1])]"> then, have nested xsl:for-each booking elements within group (i.e. booking elements same vouchernumber)
<xsl:for-each select="key('x', vouchernumber)"> then, within next xsl:for-each can use position() function count of record within specific group
try xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:output method="text" /> <xsl:key name="x" match="booking" use="vouchernumber"/> <xsl:template match="/*"> <xsl:for-each select="booking[generate-id() =generate-id(key('x',vouchernumber)[1])]"> <xsl:for-each select="key('x', vouchernumber)"> <xsl:value-of select="bookingid" /> <xsl:text>,</xsl:text> <xsl:value-of select="substring-after(vouchernumber, '-')" /> <xsl:text>,</xsl:text> <xsl:value-of select="position()" /> <xsl:text> </xsl:text> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet> note, assumed actual xml well-formed , there single root element containing booking elements.
Comments
Post a Comment