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
bob bobSubject: Help in creating shopping list
Author: bob bob
Date: 30 Sep 2005 08:26 AM
Hello all,
I'm pretty new to xsl and i am having quite a bit of trouble solving this problem.

I have a number of recipes in one xml document (xml format follows), i need to present a shopping list of all ingredients. This would mean adding up all ingredients qty that are the same, so if there are 2 items in seperate recipes, there should only be one occurance in the shopping list with the combined qty.

<recipeml>
<recipe>
<ingredients>
<ing>
<amt>
<qty>1</qty>
<unit>Kilogram</unit>
</amt>
<item>chocolate</item>
</ing>
<ing>
<amt>
<qty>3</qty>
</amt>
<item>egg</item>
</ing>
</ingredients>
</recipe>
<recipe>
<ingredients>
<ing>
<amt>
<qty>0.5</qty>
<unit>Kilograms</unit>
</amt>
<item>Chocolate</item>
</ing>
<ing>
<amt>
<qty>2</qty>
</amt>
<item>egg</item>
</ing>
<ing>
<amt>
<qty>1</qty>
<unit>Kilograms</unit>
</amt>
<item>Chicken</item>
</ing>
</ingredients>
</recipe>
</recipeml>


So the result from that sample would be something like
3 kilogram chocolate
5 egg
1 kilogram chicken

Any help on this would be most apreciated.

Thanks in advance

Postnext
Ivan PedruzziSubject: Help in creating shopping list
Author: Ivan Pedruzzi
Date: 30 Sep 2005 02:11 PM
The following assumes that ingredient names are spell the same, that's not the case in your sample ( chocolate / Chocolate ).


<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="ingredients" match="recipeml/recipe/ingredients/ing" use="item"/>

<xsl:template match="/">
<xsl:for-each select="recipeml/recipe/ingredients/ing[generate-id() = generate-id(key('ingredients', item)[1])]">
<xsl:value-of select="concat(sum(key('ingredients', item)/amt/qty), ' ', amt/unit, ' ', item, '&#10;')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Ivan Pedruzzi
Stylus Studio Team

Posttop
bob bobSubject: Help in creating shopping list
Author: bob bob
Date: 30 Sep 2005 09:31 PM
Thanks,
Works perfectly.

its exactly what i was after.

Thanks again.

 
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.