xsl-list
[Top] [All Lists]

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

2015-10-27 12:37:14

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(_at_)dvint(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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?

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

<Prev in Thread] Current Thread [Next in Thread>