[j-nsp] break statement in SLAX
Martin T
m4rtntns at gmail.com
Thu Dec 13 13:04:45 EST 2018
On Thu, Dec 13, 2018 at 7:15 PM Martin T <m4rtntns at gmail.com> wrote:
>
> Hi!
>
> I have a XML text node which contains random integers between 1 and 10
> and are separated by LF(0x0a). I convert this text node into a string
> and use jcs:break-lines() to put those numbers into a node-set. This
> means, that eventually I have an object like this:
>
> (sdb) print $int_ns
> [node-set] (10)
> <text>8</text>
> <text>8</text>
> <text>2</text>
> <text>1</text>
> <text>2</text>
> <text>9</text>
> <text>3</text>
> <text>4</text>
> <text>7</text>
> <text>1</text>
>
> (sdb)
>
>
> Now I want to process only the first three integers which are less
> than 5. As I understand, for-each loop does not support breaking out
> from the loop so I did it like this:
>
> $ cat read_part_of_node-set.slax
> version 1.2;
>
> main <top> {
>
> var $int := {
> <text> 8;
> <text> 8;
> <text> 2;
> <text> 1;
> <text> 2;
> <text> 9;
> <text> 3;
> <text> 4;
> <text> 7;
> <text> 1;
> }
>
> var $int_ns := $int/*;
>
> mvar $n;
> set $n = 1;
>
> mvar $m;
> set $m = 1;
>
> while ( $m < 4 ) {
> if ( $int_ns[number($n)] < 5 ) {
> <output> $int_ns[number($n)];
> set $m = $m + 1;
> }
> set $n = $n + 1;
> }
> }
> $ slaxproc -g -E read_part_of_node-set.slax
> <?xml version="1.0"?>
> <top>
> <output>2</output>
> <output>1</output>
> <output>2</output>
> </top>
> $
>
> Just wondering, maybe there is a more elegant solution for this?
>
>
> thanks,
> Martin
In addition, it would require a protection against an endless loop
inside the while loop. Something like this:
if ( $n > count($int_ns) ) {
set $m = 4;
}
Martin
More information about the juniper-nsp
mailing list