[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Processing 2 files and using one with key() lookups?


Subject: Re: [xsl] Processing 2 files and using one with key() lookups?
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 27 Oct 2015 17:37:09 -0000

Is this XSLT 1.0 or 2.0? (or, dare I ask, 3.0?)

Michael Kay
Saxonica

> On 27 Oct 2015, at 16:44, dvint@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> I've run into a couple of odd problems trying to use keys and I guess I
> have never processed 2 files where one is there to just be used to lookup
> values.
>
> First problem
>
> So one file is the one that drives the processing. I was using this as the
> input to my stylesheet and using the document() function to read the
> second one and build my keys. This was failing when I tried this:
>
>    <xsl:param name="QAREPORTname" select="_dan1385156030824-qa.dita"/>
>    <xsl:variable name="QAREPORT" select="document($QAREPORTname, /)"/>
>
>     <xsl:key name="TOPIC" match="$QAREPORT/data[@name='WDtopicID']"
> use="."/>
>
> or
>
>     <xsl:key name="TOPIC" match="document($QAREPORTname,
> /)/data[@name='WDtopicID']" use="."/>
>
> or
>
>     <xsl:key name="TOPIC" match="document(_dan1385156030824-qa.dita,
> /)/data[@name='WDtopicID']" use="."/>
>
>
> I couldn't find a way to make this work, so my workaround was to feed the
> reference document to the stylesheet and then read in the driver file and
> continue processing. Seems to work but lead to the next problem
>
> Second problem
>
> The key definition seems to get lost when I do the following:
>
>   <xsl:template match="/">
>       <xsl:copy-of select="key('TOPIC', 'dan1370798005424')"/>
>           <!-- Force processing to continue with the second file -->
>        <xsl:apply-templates select="$FLATMAP" mode="map"/>
>    </xsl:template>
>
>    <xsl:template match="/" mode="map">
>        <xsl:apply-templates mode="map"/>
>    </xsl:template>
>
>
>    <xsl:template match="topicref" mode="map">
>        <topicref>
>            <xsl:copy-of select="key('TOPIC', 'dan1370798005424')"/>
>        </topicref>
>    </xsl:template>
>
> What I'm seeing is that the copy-of statement in the template matching '/'
> with no mode gives me the correct result. When the same statement is used
> in the match for 'topicref' I get no match or content generated.
>
> Question:
>
> - Can you explain why the key() doesn't work in the template with the mode
> and give me a correction/workaround?
>
> - I'd really like to go back to the more natural processing order and get
> rid of the modes on the templates. Is there some way to get my key
> definition to process a file that isn't the input?


Current Thread
Keywords