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
Conferences Close Tree View
+ Stylus Studio Feature Requests (1192)
+ Stylus Studio Technical Forum (14621)
+ Website Feedback (249)
- XSLT Help and Discussion (7625)
-> + XSL:FO Marker Question (2)
-> + trim after character...? (2)
-> + Convernting CSS + xsl to XSL:F... (2)
-> + save external image in xml/xsl (3)
-> + Table of Contents (2)
-> + Problem with select expression (2)
-> + Slow for-each select (7)
-> + Restructuring XML (2)
-> + Coloring xml output (3)
-> - Looping through xsl based on a... (5)
-> ->Looping through xsl based...
-> ->Looping through xsl based...
-> ->Looping through xsl based...
-> ->Looping through xsl based...
-> + Where is the wizard? (3)
-> + Save XML thru href (2)
-> + existing xslt, source and dest... (5)
-> + spliting xml files by certain ... (8)
-> + checking condition and writing... (2)
-> + how to insert un return in the... (2)
-> + String in a range (5)
-> + To identify the right edition (4)
-> + Flow Control Feature (2)
-> + calling nested external functi... (3)
-> + Replacing commas with a blank (6)
-- Previous [601-620] [621-640] [641-660] Next
+ XQuery Help and Discussion (2017)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
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>

   
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.