[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Processing 2 files and using one with key() lookups?

Subject: Processing 2 files and using one with key() lookups?
From: "dvint@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 27 Oct 2015 16:43:44 -0000
 Processing 2 files and using one with key() lookups?
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.