Create a loop. All child elements are executed repeatedly until the given condition is 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, Loop, Otherwise, Record, SavePages, Until, While


test (XPath expression)

Every time after the the loop is executed, the condition is evaluated. If it is true, the loop exits.


<Record element="data">
  <SetVariable variable="i" select="0"/>
  <Until test="$i = 4">
    <Message select="concat('$i is: ', $i)"/>
    <SetVariable variable="i" select="$i + 1"/>

Gives the following output (in the protocol file)

Message: "$i is: 0"
Message: "$i is: 1"
Message: "$i is: 2"
Message: "$i is: 3"

See also

The section loops in chapter programming.