[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] [xpath] all following sibling nodes upto first occurace of specific text value


Subject: RE: [xsl] [xpath] all following sibling nodes upto first occurace of specific text value
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 11 Aug 2005 23:59:32 +0100

In general in XPath if you want to find all nodes on an axis up to the first
one that satisfies condition X, the approach is:

following-sibling::node() except
following-sibling::node()[X][1]/following-sibling::node()

The except operator is in XPath 2.0 but not in XPath 1.0. In XPath 1.0, to
write "A except B", you code it as

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

You can expect the performance of the resulting expression to be fairly
awful; a recursive solution at the XSLT level that steps along the axis
until it finds a node satisfying X is likely to be much more efficient.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: geoff hopkins [mailto:geoffhopkins123@xxxxxxxxx] 
> Sent: 11 August 2005 13:34
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] [xpath] all following sibling nodes upto first 
> occurace of specific text value
> 
>  I understand this is a xslt forum but there does not
>  seem to be any decent xpath places...
>  
>  I need a xpath expression to be used with a for-each
>  loop... context node is X.Parent select the next
>  items
>  until it finds the next occurance of X.Parent or
>  END-OF-DATA as the text value of the node
>  
>  e.g. the following xml is a typical xml file
>  
>  <?xml version="1.0" encoding="utf-8"?>
>  <root>
>  	<node>X.Parent</node>
>  	<node>Y.Child</node>
>  	<node>Y.Child</node>
>  	<node>X.Parent</node>
>  	<node>Y.Child</node>
>  	<node>END-OF-DATA</node>
>  </root>
>  
>  Thanks...
>  
>  Geoff
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 


Current Thread
Keywords