Subject: Re: [xsl] Keeping result-document() from writing to a file more than once? From: "Dan Vint dvint@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Mon, 6 May 2019 03:36:30 -0000 |
I just wanted to post an update. Thanks for pointing me in this direction, it's the first time I've used maps. the idea works but we have a quirk in my DITA content. I've got different keys pointing to the same content. So although the map key is unique, when I go to write a file based upon the sourcename + target, I end up with the same filename for the output.
The map solution gives me a convenient way to build an XML source that I can then process and check for duplicates in the filenames I'm creating.
Yes--thanks for catching that--cut and paste error.
Cheers,
E.
-- Eliot Kimber http://contrext.com
o;?On 4/19/19, 10:10 AM, "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
On 19.04.2019 17:02, Eliot Kimber ekimber@xxxxxxxxxxxx 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> >
--------------------------------------------------------------------------- Danny Vint
Panoramic Photography http://www.dvint.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Seek XPath 2.0 expression, Dimitre Novatchev dn | Thread | Re: [xsl] Keeping result-document(), Eliot Kimber ekimber |
Re: [xsl] Seek XPath 2.0 expression, Alan Painter alan.pa | Date | Re: [xsl] Keeping result-document(), Eliot Kimber ekimber |
Month |