If you have an LXP region that you wish to iterate more than once, the <for>
tag exists for this purpose. It requires at least a start
attribute, and either an end
or endbefore
attribute. Each attribute should be given a numeric value.
The start
attribute defines a whole integer value to begin the loop
iteration with. That value initializes an iteration count, which will be incremented by 1 for
each iteration of the loop. If the end
attribute is defined, the loop will
stop iterating after the iteration count has looped through the number
specified by end
. Alternatively, if the endbefore
attribute is defined, the loop will stop one iteration earlier. Using end
and endbefore
is respectively equivalent to using the <=
and <
operators in a programming language such as PHP
or C.
While iterating, a special LXP object called for
maintains a value
called count
, which stores the value of the current loop’s iteration count.
Example 13-19 demonstrates a simple for loop that
will iterate from 1 to 5.
Example 13-19. A simple <for> loop
<lxp> <for start="1" end="5"> Iterating loop: <putvar name="for.count" /><br /> </for> </lxp>
Here is the output from this loop, when processed by LXP:
Iterating loop: 1<br /> Iterating loop: 2<br /> Iterating loop: 3<br /> Iterating loop: 4<br /> Iterating loop: 5<br />
The <for>
loop iterator can be invaluable when dealing with
arrays of values that you need to return by using LXP. As mentioned earlier in this chapter, if
a variable is defined with trailing square-brackets ([]
), it will be
implicitly given an offset by LXP for each value found with that name. LXP will also create an
object variable of the same name, but without square-brackets, with two attributes: size
and last
. The size
value (e.g., my_array.size
) stores the number of elements in the implicitly defined array, while
the last value (e.g. my_array.last
) stores the offset of the last
value.
Example 13-20 demonstrates the handling of a
passed variable called my_array[]
.
Example 13-20. Handling array results with <for>
<lxp> <for start="0" end="@my_array.last"> Here is the value of my_array, at offset <putvar name="for.count" />: <putvar name="my_array[@for.count]" /> <br /> </for> </lxp>
Notice that the at sign (@
) for the my_array
object
is only used where its variable value is desired, rather than its name.
Thus, it is omitted in the <putvar>
tag, since the name
attribute expects a literal variable name, and not the variable’s
value.
3.149.253.210