xsl-list
[Top] [All Lists]

RE: Context node traversal inside predicates (was: Nodes and Strings)

2005-07-26 06:35:46
The 'context()' function would be similar to the 'current()' fuction.
It would recall previous context nodes.

'context(n)' would recall the n-th context node (as found 
when propagating  
upwards in the predicates of the expression)

e.g.:
'context(0)' is equal to '.'
'context(1)' is equal to the context node as constructed by the  
immmediately outer predicate.
...
'context(-1)' would be equal to the context node as found in 
the outermost  
predicate.

Something like this was in an early draft of XPath 1.0, and was implemented
(IIRC) in WD-xsl, though I've rarely seen it used in practice.

I think the idea of manually addressing the stack of context variables is
very error-prone and counter-intuitive. The proper way to do this is to
declare a range variable. In XQuery you can do this using the "let" clause
of the FLWOR expression; XPath 2.0 has a poor man's version in the "for"
expression, which allows:

$SetA/Element[for $Z in . return $setB/Element[substring-after(.,'.')=$Z]]

In fact you might want to turn the whole thing into an XQuery-like join:

for $Z in $SetA/Element,
    $Y in $setB/Element
return
   if (substring-after($Y, '.') = $Z)
   then $Y else ()

Michael Kay
http://www.saxonica.com/




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



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