Re: [xsl] Brackets in XPATHS

Subject: Re: [xsl] Brackets in XPATHS
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Thu, 14 Feb 2002 08:46:17 +0000
Chris Maden wrote:
>>You can start with a node-set and refine it, but you can't reference a
>>node-set (the union of xpath2 and xpath3) as if it were the child of another
>>node-set (xpath1).
>>
>>(/xpath1/xpath2|/xpath1/xpath3)/xpath4 should work for you.
>
> That's not legal. A UnionExpr (with the '|' operator) can't be part
> of a Step like that; parentheses, in general, are not allowed in
> Steps.

Actually, it is legal. The () around the unioned paths indicate that
the start of the location path is an expression. The relevant
productions from the XPath Rec are:

[19]    PathExpr       ::=    LocationPath
                              | FilterExpr
                              | FilterExpr '/' RelativeLocationPath
                              | FilterExpr '//' RelativeLocationPath
[20]    FilterExpr     ::=    PrimaryExpr
                              | FilterExpr Predicate
[15]    PrimaryExpr    ::=    VariableReference
                              | '(' Expr ')'
                              | Literal
                              | Number
                              | FunctionCall

Here we have a path expression that is a filter expression followed by
a '/' followed by a relative location path. The filter expression is a
primary expression consisting of '(', an expression, and ')'. The
expression is itself a path expression that is a location path.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


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


Current Thread