|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Collect data from a whole map hierarchy, then use
Am 6/15/2023 um 11:06 PM schrieb rick@xxxxxxxxxxxxxx:
>
> Thank you Martin. Here is my working stylesheet. I just have to add
> the second stage to insert the summary data into one of the topics. I
> appreciate your generous help.
>
> Rick
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
> xmlns:math="http://www.w3.org/2005/xpath-functions/math"
>
> xmlns:rq="http://www.frameexpert.com/functions"
>
> B B B exclude-result-prefixes="xs math rq"
>
> B B B version="3.0" expand-text="yes">
>
> B B B B <xsl:output indent="yes"/>
>
> B B B B <!-- Variables to get required summary data from all documents. -->
>
> B B B <xsl:variable name="referenced-topic-docs"
> select="rq:collect-docs(.)"/>
>
> B B B <xsl:variable name="summary-data" select="$referenced-topic-docs !
> (.//tool | .//spare | .//supply)"/>
>
> B B B B <xsl:template match="/">
>
> B B B B B B B <!-- Test call to see the data: -->
>
> B B B B B B B <xsl:call-template name="write-summary-data"/>
>
> B B B B B B B <!-- Further processing here. -->
>
> B B B </xsl:template>
>
> B B B B <xsl:template name="write-summary-data">
>
> B B B B B B B <map-data>
>
> B B B B B B B B B B B <summary>
>
> B B B B B B B B B B B B B B B <xsl:for-each-group select="$summary-data"
> group-by="normalize-space(.)">
>
> B B B B B B B B B B B B B B B B B B B <xsl:sort select="local-name(.)"/>
>
> B B B B B B B B B B B B B B B B B B B <xsl:sort
select="normalize-space(.)"/>
>
> B B B B B B B B B B B B B B B B B B B <xsl:element
name="{local-name(.)}"><xsl:attribute
> name="quantity"
> select="sum(current-group()/@quantity)"/>{normalize-space(.)}</xsl:element>
>
> B B B B B B B B B B B B B B B </xsl:for-each-group>
>
> B B B B B B B B B B B </summary>
>
> B B B B B B B </map-data>
>
> B B B </xsl:template>
>
Instead of delegating that to a named template, you could of course have
another global variable e.g.
<xsl:variable name="summary-map">
B B B B B <map-data>
B B B B B B B B B B B <summary>
B B B B B B B B B B B B B B B <xsl:for-each-group select="$summary-data"
group-by="normalize-space(.)">
B B B B B B B B B B B B B B B B B B B <xsl:sort select="local-name(.)"/>
B B B B B B B B B B B B B B B B B B B <xsl:sort
select="normalize-space(.)"/>
B B B B B B B B B B B B B B B B B B B <xsl:element
name="{local-name(.)}"><xsl:attribute
name="quantity"
select="sum(current-group()/@quantity)"/>{normalize-space(.)}</xsl:element>
B B B B B B B B B B B B B B B </xsl:for-each-group>
B B B B B B B B B B B </summary>
B B B B B B B </map-data>
</xsl:variable>
and then, where you need that "summay-map", you don't need call-template
but just use <xsl:sequence select="$summary-map"/> or <xsl:copy-of
select="$summary-map"/>.
|
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








