RE: [xsl] extracting preceding nodes with certain exceptions

Subject: RE: [xsl] extracting preceding nodes with certain exceptions
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Wed, 17 Sep 2003 04:43:10 +0100
> 
> Hello all,
>   I need some help with the following:
> I have (but could be variable):
> <tokens>
>     <token position="1"/>
>     <token position="2"/>
>     <token-group>
>          <row>
>              <token position="3"/>
>              <token posistion="4"/>
>           </row>
>           <row>
>               <token position="5"/>
>               <token position="6"/>
>            </row>
>      </token-group>
> </tokens>
> 
> I would like to sum the values of all preceding nodes of 
> <token> #6 that 
> are <token>s, but which are not descendants of the preceding 
> sibling of 
> its ancestor <row>, that is I want to exclude <token>s #3 and 
> #4. 

In XPath 2.0 you can write

preceding::token except ancestor::row/preceding-sibling::token

Unfortunately XPath 1.0 has no direct equivalent of the "except"
operator. Some processors offer the EXSLT set:difference() extension
function or an equivalent, or you can do "A except B" by writing the
rather expensive construct:

  A[count(.|B) != count(B)]

Michael Kay


I have sum(ancestor::row//token[@position &lt; 
> $token-position]) where 
> in this case $token-position = 6, but that excludes the tokens in 
> positions 1 and 2.   I think I am missing something simple here, but 
> suggestions are welcome.
> thanks in advance,
> Matthew L. Avizinis
> Gleim Publications, Inc.
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


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


Current Thread