W3C home > Mailing lists > Public > xsl-editors@w3.org > October to December 2001

Re: An XPath function is needed for accessing the filter's parent context

From: Oleg Tkachenko <olegt@multiconn.com>
Date: Thu, 20 Dec 2001 17:51:39 +0200
Message-ID: <3C22090B.3050501@multiconn.com>
To: xsl-editors@w3.org
Stanislav Vitebskiy wrote:

> Here is a simple problem: select all the <customer> elements
> that have <employee> sibling with the same 'name' attribute.
> The solution is pretty obvious:
> 	customer[@name = ../employee/@name]
> 
> Lets now complicate the task a little. Let the name consist of
> two parts, 'first-name' and 'last-name'.
> Little complication - big problem: the technique shown above
> will no longer work; there is no way to compare more than one
> attribute of different elements, and there is no workaround in
> the current version of XPath.


current() function may be helpful to a certain extent, consider current 
node is customer element:
self::*[../employee[@first-name=current()/@first-name
	and @last-name=current()/@last-name]]

may be it's not too handy, but actually it is grouping problem and keys 
would be more elegant and effective solution:

<xsl:key name="kEmpName" match="employee" use="concat(@first-name, '-', 
@last-name)"/>
...
<xsl:apply-templates select="customer[key('kEmpName', 
concat(@first-name, '-', @last-name))]"/>

-- 
Oleg Tkachenko
Multiconn International, Israel
Received on Thursday, 20 December 2001 14:34:23 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:59:52 GMT