You can use the three argument form there, but that is not
semantically equivalent. It matches _every_ element if the key returns
a node, and matches no element otherwise. To match nodes if they are
returned by the key you need an expression using ancestor-or-self as I
gave before or perhaps more directly:
<xsl:template match="*[some $k in key('maindoc','Sal',$doc2) satisfies
(. is $k)]"
I would tend to write this as:
<xsl:variable name="special" select="key('maindoc','Sal',$doc2)"/>
<xsl:template match="*[. intersect $special]"/>
In XSLT 3.0 you can write this match pattern as
<xsl:template match="$special"/>
which matches any node in the value of the global variable $special.
I've come across a few use cases where it's better pre-evaluate all the
"special" nodes in a global variable than to do the computation to test
whether a node is "special" within the match pattern itself; it's
obviously a performance trade-off.
Michael Kay
Saxonica
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--