This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: <xsl:for-each>


Dung, Ming-tzung wrote:
> Hi,
>     I wonder whether the XSLT has the instruction like the "break" statement
> in C/Java language inside the loop. If no such instruction, any design idiom
> can solve this problem?   Thanks in advance!!

You have to get rid of the habit of viewing xsl:for-each
as being a loop. It is not a loop. Think of it as a statement
which applies a function to each element of a list (or an
array), in parallel.
Because it's not a loop, you can't break out of it. Instead
you have to construct the correct list of nodes you want to
apply the for-each body to right at the beginning.

Instead of
  for( d in data) {
    if( d.total > max ) {
      break;
    }
    do-stuff;
  }

you have to select the right node set (which is not trivial
in this case):
   <xsl:for-each select="data[total &gt; $max][1]/preceding-sibling::data">
     <stuff/>
   </xsl:for-each>
In most cases, selecting the correct set of nodes
is much easier.

HTH
J.Pietschmann


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]