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

Subject: Re: [xsl] Processing 2 files and using one with key() lookups?
From: "dvint@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 27 Oct 2015 19:06:27 -0000
2.0

>
> 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