xsl-list
[Top] [All Lists]

parameter use in XPath

2003-10-22 15:43:45
Hello,

Is it possible to use the parameter "keyword" (line 1) in
XPath expressions (lines 5, 13, and 27) in the following stylesheet
without the use of specific processor extensions?

I know one may not use variables set by the stylesheet in
XPath expressions, but $keyword is passed from the command line
and thus not computed or set by the stylesheet.

Many thanks in advance,
Saverio

--

 1:<xsl:param name="keyword"/>

 2:<xsl:template match="{$keyword}">
 3:   <xsl:apply-templates/>
 4:</xsl:template>

<!-- matches all nodes which have a descendant-or-self,
     which is an ancestor-or-self::d and a leaf,
     and does nothing with them -->
 5:<xsl:template match="node()[not 
(descendant-or-self::node()[ancestor-or-self::{$keyword} and count 
(child::node()) = 0])]">

 6:  <xsl:variable name="original-node" select="."/>
 7:  <xsl:variable name="original-node-name" select="name()"/>
 8:  <xsl:variable name="original-node-id" select="@id"/>

   <!-- match a node who has a descendant with a refid attribute, e.g., e -->
 9:  <xsl:if test="descendant::node()[(_at_)refid]">
10:    <xsl:for-each select="descendant::node()[(_at_)refid]">
11:        <xsl:variable name="target-id" select="@refid"/>
12:         <xsl:variable name="target-node" 
select="//node()[(_at_)id=$target-id]"/>
13:         <xsl:if 
test="$target-node[descendant-or-self::node()[ancestor-or-self::{$keyword} and 
count (child::node()) = 0]]">

14:            <xsl:element name="{$original-node-name}">
15:               <xsl:attribute name="id">
16:                  <xsl:value-of select="$original-node-id"/>
17:               </xsl:attribute>
18:               <xsl:apply-templates select="$original-node/*"/>
19:            </xsl:element>
20:         </xsl:if>
21:      </xsl:for-each>
22:   </xsl:if>
23:</xsl:template>

<!-- matches all crosslinks and -->
24:<xsl:template match="node()[(_at_)refid]" priority="0.7">
25:   <xsl:variable name="target-id" select="@refid"/>
26:   <xsl:variable name="target-node" select="//node()[(_at_)id=$target-id]"/>

   <!-- only copies those which have a descendant-or-self,
        which has a reference to a node,
        which is an ancestor-or-self::d and a leaf -->
27:   <xsl:if 
test="$target-node[descendant-or-self::node()[ancestor-or-self::{$keyword} and 
count (child::node()) = 0]]">
28:      <xsl:copy>
29:         <xsl:attribute name="refid">
30:            <xsl:value-of select="$target-id"/>
31:         </xsl:attribute>
32:      </xsl:copy>
33:   </xsl:if>
34:</xsl:template>

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



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