XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Moby DickSubject: Looping through xsl based on an attribute value
Author: Moby Dick
Date: 13 Jun 2008 01:12 AM
Hi,

I have an xml that looks like this-

<Items>
<Item ItemID="12345" Quantity="5">
<Price TotalPrice="25"/>
<Tax SalesTax="5"/>
</Item>
</Items>

I have to transform it into another XML that looks like this-

<Items>
<Item ItemID="12345" Quantity="1">
<Price TotalPrice="5"/>
<Tax SalesTax="1"/>
</Item>
<Item ItemID="12345" Quantity="1">
<Price TotalPrice="5"/>
<Tax SalesTax="1"/>
</Item>
<Item ItemID="12345" Quantity="1">
<Price TotalPrice="5"/>
<Tax SalesTax="1"/>
</Item>
<Item ItemID="12345" Quantity="1">
<Price TotalPrice="5"/>
<Tax SalesTax="1"/>
</Item>
<Item ItemID="12345" Quantity="1">
<Price TotalPrice="5"/>
<Tax SalesTax="1"/>
</Item>
</Items>

I have to basically split the Item element into multiple Item elements, each with quantity. I also have to split the TotalPrice & SalesTax attribute values by dividing the original values with the quantity.

Any ideas on how I can achieve this?

Thanks,
Moby

Postnext
Tony LavinioSubject: Looping through xsl based on an attribute value
Author: Tony Lavinio
Date: 13 Jun 2008 08:14 AM
If this is related to using XSLT in Stylus Studio, first please
let us know the version and which XSLT engine within it you
are using (so we know whether XSLT 1.0 or 2.0)

But you might be interested to know that the best source for
answers to general XSLT questions is the dedicated mailing
list xsl-list run by Mulberry Technologies.

Postnext
Moby DickSubject: Looping through xsl based on an attribute value
Author: Moby Dick
Date: 13 Jun 2008 12:31 PM
Hi,

I am trying to do this through Stylus Studio & the xslt version is 1.0

Thanks,
Moby

Postnext
James DurningSubject: Looping through xsl based on an attribute value
Author: James Durning
Date: 13 Jun 2008 03:54 PM
Start with a copy template:

<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
----------------------
Then add a special template for Items. We make it recursive here, calling the template recursively.
<xsl:template match="Item">
<xsl:param name="current" select="1"/>
<xsl:param name="limit" select="@Quantity"/>
<xsl:if test="$current &lt;= $limit"/>
<xsl:copy>
<xsl:attribute name="Quantity">1</xsl:attribute>
<xsl:copy-of select="@ItemID"/>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:if>
<xsl:if test="$current &lt; $limit"/>
<xsl:apply-templates select=".">
<xsl:with-param name="current" select="$current + 1"/>
<xsl:with-param name="$limit" select="$limit"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>

Posttop
Moby DickSubject: Looping through xsl based on an attribute value
Author: Moby Dick
Date: 18 Jun 2008 02:40 PM
Thanks for the tip, James.

The xsl below worked perfectly-

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<Items>
<xsl:apply-templates select="/Items/Item"/>
</Items>
</xsl:template>
<xsl:template match="Item">
<xsl:param name="current" select="1"/>
<xsl:param name="limit" select="@Quantity"/>
<xsl:if test="$current &lt;= $limit">
<xsl:copy>
<xsl:attribute name="Quantity">1</xsl:attribute>
<xsl:copy-of select="@ItemID"/>
<Price>
<xsl:attribute name="TotalPrice">
<xsl:value-of select="Price/@TotalPrice div $limit"/>
</xsl:attribute>
</Price>
<Tax>
<xsl:attribute name="TotalTax">
<xsl:value-of select="Tax/@SalesTax div $limit"/>
</xsl:attribute>
</Tax>
</xsl:copy>
</xsl:if>
<xsl:if test="$current &lt; $limit">
<xsl:apply-templates select=".">
<xsl:with-param name="current" select="$current + 1"/>
<xsl:with-param name="limit" select="$limit"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.