RE: [xsl] match nodes based on given path

Subject: RE: [xsl] match nodes based on given path
From: "Andrew Welch" <AWelch@xxxxxxxxxxxxxxx>
Date: Fri, 11 Apr 2003 11:06:24 +0100
(hmmmm stuck again very quickly :) 

Now I am generating a stylesheet which looks like:

<xsl:key name="indyLink" match="/root/node/foo" use="generate-id()"/>

<xsl:template match="*[generate-id() = generate-id(key('indyLink',generate-id()))]">
  <xsl:call-template name="IndyLink"/>
  <xsl:apply-imports/>
</xsl:template>

Which will call the named template when /root/node/foo is matched.  The key match is generated from the link file, which takes the form:

    <extended>
      <locator href="test1.xml" elementPath="/root/node/foo"/>
      <locator href="test2.xml" elementPath="/root/node/bar"/>
      <locator href="test3.xml" elementPath="/root/node/baz"/>
    </extended>

Now, in order to generate the link, I need to pass the siblings of the node matched by the key (/root/node/foo) to the named template.

How can I get to the correct <locator> from the matching template?  As Im generating the stylesheet I can do pretty much anything, but I cant see how to do it using the key approach.

I initially thought to generate-id() on an eval()'d @elementPath, but that sounds silly... 

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xmlns:saxon="http://icl.com/saxon";>

<xsl:import href="file:///C:/main.xsl"/>

<xsl:param name="thisXmlFileName" select="'test1.xml'"/>
<xsl:param name="indyLinksRTF">
    <extended>
      <locator href="test1.xml" elementPath="/root/node/foo"/>
      <locator href="test2.xml" elementPath="/root/node/bar"/>
      <locator href="test3.xml" elementPath="/root/node/baz"/>
    </extended>
</xsl:param>
<xsl:variable name="indyLinks" select="saxon:node-set($indyLinksRTF)"/>

<xsl:key name="indyLink" match="/root/node/foo" use="generate-id()"/>

<xsl:template match="*[generate-id() = generate-id(key('indyLink',generate-id()))]">
  <xsl:call-template name="IndyLink">
  //***need to pass extended nodeset here where @elementPath
  //***points to current node
  </xsl:call-template/>
  <xsl:apply-imports/>
</xsl:template>

<xsl:template name="IndyLink">
  <xsl:param name="extendedNodeSet"/>  
  ....
</xsl:template>

</xsl:stylesheet>

thanks for any help

cheers
andrew

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.470 / Virus Database: 268 - Release Date: 08/04/2003
 

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread