xsl-list
[Top] [All Lists]

node selection problem

2004-03-10 01:16:09
Hi,

I would like to retrieve all the nodes "X" inside one
node, but before another node.  The second node is always
a descendant of the first node.

book
+-- chap
+-- chap            <== inside this node
    +-- X           <== select this node
    +-- sect
        +-- X       <== select this node
        +-- sub     <== but before this node
            +-- X   <== i.e. do not select this X node
        +-- sub
        ...
    +-- sect
    +-- sect
    ...
+-- chap
...


This example is somewhat simplified, of course. 
Currently, my best bet is this:

<xsl:variable name="inside.this.node"
select="/book/chap[2]"/>
<xsl:variable name="before.this.node"
select="$inside.this.node/sect[1]/sub[1]"/

<xsl:variable name="the.X.nodes"
  select="$before.this.node/preceding::X[
    ancestor::*[(_at_)ID=$inside(_dot_)this(_dot_)node/@ID]
  ]"
/>

This method doesn't seem very efficient given that it must
first select all preceding X nodes, and then filters this
nodeset using the predicate that matches ID values.

As I have to do this many times over a big document, I
would be interested in better ways.

Thank you,
-- 
Jakob.

PS: I am subscribed to the list digest, please cc: me.




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



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