On 19.04.2019 17:02, Eliot Kimber ekimber(_at_)contrext(_dot_)com wrote:
If you construct map entries for each use and then combine them into a single map using the
"use-first" or "use-any" "duplicates" option then you can blindly process all
the references and let the map-merge process produce a single list of elements, e.g.;
<xsl:variable name="use-entries" as="map(*)*">
<xsl:call-template name="find-all-conrefs"/>
</xsl:variable>
The find-all-conrefs template generates maps, one for each id/element pair, which you can
create with xsl:map or using the literal map constructor: "map{$key : $value}".
Now make a single map:
<xsl:variable name="use-map" as="map(*)"
select="map:merge($use-entries, map{ 'duplicates' : 'use-any'}"
/>
And then process the entries to produce the result docs:
<xsl:for-each select="map:keys($use-map)">
<xsl:variable name="key" select="." as="xs:string"/>
<xsl:call-template name="make-result-doc">
<xsl:with-param name="key" as="xs:string" select="$key"/>
<xsl:with-param name="key" as="element() " select="map:get($use-map, $key)"
as="element() "/>
Isn't that second parameter supposed to be named
<xsl:with-param name="value" as="element() "
select="map:get($use-map, $key)" as="element() "/>
?
</xsl:call-template>
</xsl:for-each>
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--