|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Closest ancestor with one of set of names
Hi Paul,
> I have a node stored in a variable, and a list of element names.
> The stored node is not the context node
>
> I need to find the node that meets these criteria:
> 1) name is in the list
> 2) is an ancestor of the stored node.
> 3) is the closest (most direct) ancestor of the stored node, from
> all ancestor nodes whose names (element names) are in the list,
You can find all ancestor elements of the node $NODE with:
$NODE/ancestor::*
When you use a variable reference at the beginning of a path then the
node(s) in that variable form the starting point for the path.
Assuming that the element names are given as the values of nodes in a
node set, held in the $NAMES variable, then you can find those
ancestor elements that have a name from that list with:
$NODE/ancestor::*[local-name() = $NAMES]
This works because if you compare a string (the local name) to a node
set, then the comparison is true if of the nodes have a value equal to
the string.
And you can find the closest one by looking at the first of those (the
ancestor:: axis is a reverse axis, so the first is the nearest
ancestor):
$NODE/ancestor::*[local-name() = $NAMES][1]
If the element names (e.g. FRONT and OPEN) are known to you, such that
they can be hardcoded in the stylesheet, then you could use something
like:
$NODE/ancestor::*[self::FRONT or self::OPEN][1]
This deals better with namespace issues than testing the local-name()
would.
If the element names are in a string (e.g. 'FRONT,OPEN') then you can
use contains() instead:
$NODE/ancestor::*[contains(concat(',', $NAMES, ','),
concat(',', local-name(), ','))][1]
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








