Create a loop. All child elements are executed as long as the condition in the test attribute evaluates to true.

Child elements

A, Action, AddSearchpath, AttachFile, Attribute, B, Barcode, Bookmark, Box, Br, ClearPage, Clip, Color, Column, Columns, Copy-of, DefineColor, DefineFontalias, DefineFontfamily, DefineMatter, DefineTextformat, Element, Fontface, ForAll, Frame, Group, HSpace, Hyphenation, I, Image, Include, Initial, InsertPages, Layout, Li, LoadDataset, LoadFontfile, Loop, Message, NextFrame, NextRow, NoBreak, Options, Output, Overlay, Pageformat, Pagetype, Paragraph, PlaceObject, PositioningArea, PositioningFrame, ProcessNode, SaveDataset, SavePages, SetGrid, SetVariable, SortSequence, Span, StructureElement, Sub, Sup, Switch, Table, TableNewPage, Tablehead, Tablerule, Td, Tr, Trace, Transformation, U, Until, VSpace, Value, While

Parent elements

AtPageCreation, AtPageShipout, Case, Contents, ForAll, Layout, Loop, Otherwise, Record, SavePages, Until, While


test (XPath expression)

Every time before the the loop is executed, this condition must evaluate to true. See the command Until for a loop with an exit test.


The following example creates a textblock with three times the contents 'Text Text Text '.

<Record element="data">
  <SetVariable variable="counter" select="1"/>
  <SetVariable variable="text" select="''"/>
  <While test=" $counter &lt;= 3 "> <!-- less or equal -->
    <SetVariable variable="counter" select=" $counter + 1"/>
    <SetVariable variable="text">
      <Value select="$text"/>
      <Value select="'Text '"/>
      <Paragraph><Value select="$text"/></Paragraph>

See also

The section loops in chapter programming.