Subject:XSTL help(debug) Author:Aaron Job Date:07 Oct 2005 07:13 PM Originally Posted: 04 Oct 2005 09:40 AM
hello, I am haveing a problem with a XSL file. I am trying to add up all the quanties of each of the items and compile a shopping list. here is some of my xml file<br>
<br>
<menu><br>
<recipe><br>
<head><br>
<title>$20,000 Prize-Winning Chili</title><br>
</head><br>
<ingredients><br>
<ing><br>
<amt><br>
<qty>2.5</qty><br>
<unit>pound</unit></amt><br>
<item>Lean ground chuck</item></ing><br>
<ing><br>
<amt><br>
<qty>1</qty><br>
<unit>pound</unit></amt><br>
<item>Lean ground pork</item></ing><br>
<ing><br>
<amt><br>
<qty>1</qty><br>
<unit>cup</unit></amt><br>
<item>Finely chopped onion</item></ing><br>
<ing><br>
<amt><br>
<qty>4</qty><br>
<unit/></amt><br>
<item>Garlic cloves; finely chpd.</item></ing><br>
</menu><br>
<br>
The full XML file is located here (site down) I want it to list all the items once(if they come up more than that) and give the sum of the quanty(the qty tag). <br>
eg(quanty to come form qty tag): Chicken 400g<br>
Milk 100ml<br>
<br>
My XSL code: (full listing <a href="http://www.users.on.net/~aaronjob/ass1part3.xsl">http://www.users.on.net/~aaronjob/ass1part3.xsl</a>)<br>
<br>
<?xml version="1.0"?><br>
<xsl:stylesheet version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform">">">http://www.w3.org/1999/XSL/Transform"></a><br>
<xslutput method="html"/><br>
<xsl:key name="tempItem" match="recipeml/menu/recipe/ingredients/ing" use="item"/><br>
<xsl:template match="/"><br>
<xsl:apply-templates select="recipeml/menu"/><br>
</xsl:template><br>
<xsl:template match="menu"><br>
<html><br>
<head><br>
<title>Shopping List</title><br>
</head><br>
<body><br>
<xsl:apply-templates select="//ing"/><br>
</body><br>
</html><br>
</xsl:template><br>
<xsl:template match="//ing"><br>
<li><br>
Item:<br>
</li><br>
<xsl:for-each select="./item[generate-id()= generate-id(key('tempItem',item)[1])]"><br>
<xsl:value-of select="./item"/><br>
Count: <xsl:value-of select="count(/item=current())"/><br>
Generated ID: <xsl:value-of select="generate-id(.)"/><br>
</xsl:for-each><br>
</xsl:template><br>
<xsl:template match="*|text()"/><br>
</xsl:stylesheet><br>
<br>
I have been pulling my hair out for days now over it can someone help me. Thanks to anyone who even has a go at it
Subject:XSTL help(debug) Author:(Deleted User) Date:05 Oct 2005 12:02 PM
In your original XLST you have to modify for-each :
<xsl:for-each select="item[generate-id(..)= generate-id(key('tempItem',.)[1])]">
key('tempItem',.) returns you "ing", so you have to use "ing" in both
generate-id() calls.
Inside the predicate [] the context node is "item", so you have to use
".." to get to the "ing"