Bucle

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Acciones > Condición, Bucle, Permitir, Probar/Capturar, Generar >

Bucle

La acción Bucle (imagen siguiente) recorre una secuencia de elementos definidos con las opciones Por cada e Interrumpir bucle si. Dentro del bucle puede definir qué conjunto de acciones se deben llevar a cabo durante cada iteración. Por ejemplo, en la imagen siguiente, por cada iteración se lleva a cabo la acción Anexar al nodo.

MTDLoop

La secuencia que recorre el bucle se define mediante expresiones XPath en las opciones Por cada e Interrumpir bucle si. Es muy importante tener en cuenta estos aspectos:

 

Por cada: su valor puede ser una secuencia nombrada en la expresión XPath (p. ej.: 1 to 7) o puede obtenerse de una estructura XML (p. ej. $XML1/Products/Product selecciona una secuencia formada por todos los elementos Product de la estructura $XML1). La opción Por cada puede ir acompañada o no de la opción Interrumpir bucle si. Si no se utiliza la opción Interrumpir bucle si, el bucle finalizará cuando se completen todas las iteraciones.
Repetir variable: se trata de la variable que almacena el elemento de la secuencia que está recorriendo el bucle. La variable de bucle se identifica por medio de un nombre. Para darle un nombre a la variable de bucle haga doble clic detrás del signo $ e introduzca el nombre. En la imagen anterior, por ejemplo, la variable de bucle se llama MyLoop. Se le hace referencia como a cualquier otra variable XPath, es decir, con el signo $ delante del nombre ($MyLoop). La variable estará dentro del ámbito del bucle. Esto significa que no podrá hacer referencia a la variable desde expresiones XPath que estén fuera del bucle. Por ejemplo, observe que en la imagen se hace referencia a la variable de bucle en la opción nodos nuevos de la acción Anexar al nodo. Esta referencia es válida porque la acción Anexar al nodo se creó dentro del bucle y, por tanto, la variable está dentro del ámbito. (También se le hace referencia en la opción Interrumpir bucle si.)
Interrumpir bucle si: es una expresión XPath que se evalúa antes de cada iteración. Si la expresión obtiene el resultado true(), entonces se interrumpe el bucle. En la imagen anterior, por ejemplo, la expresión XPath $MyLoop='' especifica que el bucle se interrumpirá si la evaluación determina que el contenido de la variable $MyLoop está vacío. Esto ocurrirá cuando se encuentre el primer elemento Product vacío y se coloque en la variable MyLoop.

 

Nota:si la variable del bucle contiene un conjunto de nodos (también llamado estructura), entonces este conjunto de nodos queda bloqueado y no lo pueden modificar las acciones que contenga la acción Bucle. En el ejemplo de la imagen los nodos nuevos que se añadan con la acción Anexar al nodo se añaden a otra estructura XML ($XML2). También puede modificar la secuencia que recorre el bucle de la siguiente manera: en lugar de recorrer los nodos directamente, se recorre una secuencia de números que está vinculada con la secuencia de nodos. Por ejemplo, en lugar de recorrer la secuencia de nodos Product, podemos recorrer un rango de números que esté vinculado con la secuencia de nodos. Podemos cambiar la expresión XPath de la opción Por cada $XML1/Products/Product por la expresión for $i in 1 to count($XML1/Products/Product) return $i. Ahora el bucle recorre una secuencia de números. Dentro del bucle podemos tener acceso al nodo Product actual con la expresión XPath: $XML1/Products/Product[$i].

 

Las acciones definidas en el ejemplo de la imagen crean un duplicado del fragmento de la estructura. Cuando se carga la página, la acción Bucle recorre los elementos $XML1/Products/Product. Durante cada iteración, el nodo Product actual se almacena en la variable de bucle MyLoop. Después se añade este nodo Product (de la variable $MyLoop) como el último nodo secundario del nodo $XML2/Products. El bucle continúa hasta copiar el último elemento Product de $XML1/Products en $XML2/Products, como muestra la siguiente imagen.

MTDLoopDataCopy

 


© 2019 Altova GmbH