You changed the format. in the form you showed originally every item
terminated with a ; you had two items, and two ;
the form you show now has one item but no ;
You could add the trailing ; by making the initial param
<xsl:param name="details" select="concat(invoiceDetails,';')"/>
On Tue, 25 Aug 2020 at 21:41, Prady Prady prady.chin@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> This works good. Thanks for the solution.
>
>
> But this is not working if there is only one order
>
> eg:
> =====================
> Input xml:
>
> <Payments>
>
> <Payment>
>
> <invoiceDetails>order1#amt1</invoiceDetails>
>
> </Payment>
>
> </Payments>
>
> I need to be able to convert this to:
> Output xml:
>
> <Orders>
>
> <Order>
>
> <OrderNumber>order1</OrderNumber>
>
> <Amount>amt1</Amount>
>
> </Order>
>
> </Orders>
> ======================
>
> On Thu, 20 Aug 2020 at 12:52, Leo Studer leo.studer@xxxxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
>> Nice, a recursive template with a parameter ;-)
>>
>> Cheers
>> Leo
>>
>>
>> >
>> > <xsl:template match="Payment">
>> > <xsl:param name="details" select="invoiceDetails"/>
>> > <xsl:variable name="car" select="substring-before($details,';')"/>
>> > <xsl:variable name="cdr" select="substring-after($details,';')"/>
>> > <Order>
>> > <OrderNumber><xsl:value-of
>> select="substring-before($car,'#')"/></OrderNumber>
>> > <Ammount><xsl:value-of select="substring-after($car,'#')"/></Ammount>
>> > </Order>
>> > <xsl:if test="contains($cdr,'#')">
>> > <xsl:apply-templates select=".">
>> > <xsl:with-param name="details" select="$cdr"/>
>> > </xsl:apply-templates>
>> > </xsl:if>
>> > </xsl:template>
>> >
>>
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2739265> (by
> email <>)
|