RE: [xsl] invalid xpath?

Subject: RE: [xsl] invalid xpath?
From: "Trevor Nicholls" <trevor@xxxxxxxxxxxxxxxxxx>
Date: Thu, 3 Jul 2008 00:40:18 +1200
Thank you Abel

> [...snip...]
>
>    <xsl:when test="not(preceding-sibling::*)[starts-with($Arg,'&#x0a;')]">
>     <xsl:call-template name="WS">
>
> [...snip...]

OK, the foregoing is invalid 1.0. So I tried modifying it to this:

 <xsl:when test="not(preceding-sibling::*) and starts-with($Arg,'&#x0a;')">
  <xsl:call-template name="WS">

Now there are no reported errors, but the test appears not to be working (at
least, there is an extra leading space in the output document wherever this
template has been called, compared with what Saxon was producing with the
original test).

Cheers
Trevor

-----Original Message-----
From: Abel Braaksma [mailto:abel.online@xxxxxxxxx] 
Sent: Wednesday, 2 July 2008 10:31 p.m.
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] invalid xpath?

Trevor Nicholls wrote:
> The following template errors in xsltproc and XMLSpy but appears to
function
> correctly when run by Saxon.
>
> [...snip...]
>
>    </xsl:when>
>    <xsl:when test="not(preceding-sibling::*)[starts-with($Arg,'&#x0a;')]">
>     <xsl:call-template name="WS">
>
> [...snip...]
>
> The xsltproc error is "XPath error: Invalid type"
> XMLSpy says "Error in XPath expression, Not a node set"
>   

Both xsltproc and XMLSpy are correct: the expression 
not(preceding-sibling::*) does not return a node set but a boolean and 
the [...] expression behind it can only be executed on a boolean.

Perhaps when you run it with Saxon you run it as XSLT 2.0 which allows 
for a predicate expression on a boolean.

> I thought the test expressions are valid v1.0 XSL. Is this not so?

Yes, they are valid.

Cheers,
-- Abel --

PS: sending the line number in your post would make it a bit easier to 
find what's wrong. Now we have to go through all lines with an XPath.

Current Thread