Subject: Re: [xsl] Making a lookup structure from multiple documents From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Mon, 12 Jun 2023 19:20:47 -0000 |
On 6/12/2023 8:49 PM, Martin Honnen martin.honnen@xxxxxx wrote: > > > On 6/12/2023 8:33 PM, rick@xxxxxxxxxxxxxx wrote: >> >> I am missing something fundamental here I think. My accumulator is >> collecting the values from each topic separately, but I want it to >> accumulate the values from the entire hierarchy before I use them. >> Here is my output: >> > Accumulator, like keys, work on a per document basis. > > I will need to see whether you can combine an accumulator of the > original document with another on referenced documents; I think it is > easy with xsl:iterate or fold-left if you process a collection or uri > collection but if the processing is done lower in a template I don't > have a better suggestion currently than the above one. > I think the following might combine an accumulator on the map and on the referenced documents: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" B B B xmlns:xs="http://www.w3.org/2001/XMLSchema" B B B xmlns:math="http://www.w3.org/2005/xpath-functions/math" B B B xmlns:map="http://www.w3.org/2005/xpath-functions/map" B B B exclude-result-prefixes="xs math map" B B B version="3.0" expand-text="yes"> B B B <xsl:output indent="yes"/> B B B <xsl:accumulator name="summary-data" initial-value="()" as="element()*"> B B B B B B B <xsl:accumulator-rule match="*[@href[matches(.,'(dita(map)?|xml)$','i')][doc-available(.)]]"> B B B B B B B B B B <xsl:sequence select="$value"/> B B B B B B B B B B <xsl:apply-templates select="doc(@href)" mode="collect"/> B B B B B B B </xsl:accumulator-rule> B B B B B B B <xsl:accumulator-rule match="tool" select="$value, ." /> B B B B B B B <xsl:accumulator-rule match="spare" select="$value, ." /> B B B B B B B <xsl:accumulator-rule match="supply" select="$value, ." /> B B B </xsl:accumulator> B B B <xsl:mode name="collect" on-no-match="shallow-skip" use-accumulators="summary-data"/> B B B <xsl:template match="/" mode="collect"> B B B B B <xsl:apply-templates mode="#current"/> B B B B B <xsl:sequence select="accumulator-after('summary-data')"/> B B B </xsl:template> B B B <xsl:template match="/"> B B B <doc> B B B B B B B <xsl:apply-templates/> B B B B B B B <xsl:for-each select="accumulator-after('summary-data')"> B B B B B B B B B B B <xsl:element name="{local-name(.)}"><xsl:attribute name="quantity" select="./@quantity"/>{.}</xsl:element> B B B B B B B </xsl:for-each> B B B </doc> B B B </xsl:template> B B B <xsl:mode on-no-match="shallow-skip" use-accumulators="summary-data"/> </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Making a lookup structure, Martin Honnen martin | Thread | Re: [xsl] Making a lookup structure, rick@xxxxxxxxxxxxxx |
Re: [xsl] Making a lookup structure, Martin Honnen martin | Date | Re: [xsl] Making a lookup structure, rick@xxxxxxxxxxxxxx |
Month |