|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Continuously add to a parameter at each call
Emil,
> <Tasks>
> <Task><Name>Hardware</Name><OutlineLevel>1</OutlineLevel><WBS>
> 1</WBS></T
> ask>
> <Task><Name>Bringup</Name><WBS>1.1</WBS><Cost>12</Cost></Task>
> <Task><Name>Testing</Name><WBS>1.2</WBS><Cost>22</Cost></Task>
> <Task><Name>Software</Name><OutlineLevel>1</OutlineLevel><WBS>
> 2</WBS></T
> ask>
> <Task><Name>Development</Name><WBS>2.1</WBS><Cost>1</Cost></Task>
> <Task><Name>Test</Name><WBS>2.2</WBS><Cost>3</Cost></Task>
> </Task>
For a document like the snip above, something like the following gets very
close to what you want. Things to note:
a) the top-level xsl:key instruction is standard means of grouping,
b) the *use* attr of key takes a XPath expression evaluating to a string
c) sum takes a node-set, which is the return type of key() function
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:key name="tasks" match="*/Task" use="substring(WBS, 1, 1)"/>
<xsl:template match="/">
<totals>
<xsl:for-each select="*/Task[OutlineLevel = '1']">
<p>
<xsl:value-of select="Name"/> total:
<xsl:value-of select="sum(key('tasks', WBS)/Cost)"/>
</p>
</xsl:for-each>
</totals>
</xsl:template>
</xsl:stylesheet>
A plain English paraphrase of the select expression of the for-each is
obvious. The select expression that does the work means:
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








