[Home] [By Thread] [By Date] [Recent Entries]

  • From: Michael Kay <mike@s...>
  • To: xml-dev@l...
  • Date: Mon, 24 Jan 2011 18:36:56 +0000

On 24/01/2011 17:06, HILLMAN, Tomos wrote:
> Hi; just a quick query for my own understanding.  Apologies if I've gotten the wrong list.
>
> I wanted to use both a union and operator in an XLST template, i.e. match="(div1|div2)[not(@role)]" (simplified).
>
> This is, I think, equivalent in XPath 2.0 as "/*//(div1|div2)[not(@role)]", which I would expect to follow the rule for patterns in XSLT (the node $N matches pattern PAT if $N is a member of expression "root($N)//(PAT)".  However, this shows as invalid.
>
> Can someone explain this to me? :)
>

One of the reasons for the restriction that "|" is allowed only as the 
top-level operator in an XSLT pattern is that it affects the algorithm 
for computing the default priority of the template rule.

You can write this pattern as

div1[not(@role)] | div2[not(@role)]

or as

*[not(@role)][self::div1 or self::div2]

(In Saxon, the first version will perform better).

Michael Kay
Saxonica


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member