xsl-list
[Top] [All Lists]

Re: [xsl] key() now has 3 arguments ... right

2012-04-25 08:23:12

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