xsl-list
[Top] [All Lists]

RE: Beginning an XPath expression with a function call?

2003-03-07 11:04:53
The expression substring-before(//foo/foo2, '-') is a valid XPath 1.0
expression.

In XPath 2.0 it is valid only if //foo/foo2 returns a single node. The
Saxon error message implies that it is selecting more than one node. If
you want to select only the first node, use
substring-before((//foo/foo2)[1], '-'). If you want to process all the
nodes (in XPath 2.0) use

for $x in //foo/foo2 return substring-before($x, '-')

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Monier, Yves
Sent: 07 March 2003 16:46
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Beginning an XPath expression with a function call?


Hello,

Given an XPath expression (for example //foo/foo2) that works 
for a given xml, I would like to use the substring-before 
function, to keep only the characters in //foo/foo2 before 
'-'. The XPath would then become substring-before(//foo/foo2, '-')

It seems that both XPath 1.0 specs, MSXML 4, Saxon 7.4 and 
XalanJ 2.5 refuse such construction (e.g. having a function 
call as root of an XPath expression). Note that it works with 
Xalan C++ 1.4. Should it, or not, regarding the specs?

Do you know if there is a simple "legal" XPath-only-based 
solution to achieve the same result?

Many thanks,

Yves

PS:
For MSXML 4 I use an XMLDOMDocument + the selectSingleNode function. 
For Saxon and XalanJ I wrote programs derived from their 
respective XPathExample and ApplyXPath samples. 
For XalanC I wrote a program derived from its XPathWrapper sample).

Saxon error is "A sequence of more than one item is not 
allowed here". XalanJ error is "Can not convert #STRING to a 
NodeList!".

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



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



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