Schleife

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Aktionen > Wenn, Schleife, Let, Try/Catch, Throw >

Schleife

Die Aktion "Schleife" (siehe Abbildung unten) iteriert über eine Sequenz von Datenelementen, die Sie mit Hilfe der Einstellungen For Each und Schleife abbrechen, wenn definieren. Sie können innerhalb der Schleife eine Gruppe von Aktionen definieren, die in jeder Iteration ausgeführt werden soll. So wird z.B. in der Abbildung unten für jede Iteration eine An Node anhängen-Aktion ausgeführt.

MTDLoop

Die Sequenz, über die die Schleife iteriert, wird durch die XPath-Ausdrücke der For Each- und Schleife abbrechen, wenn-Einstellungen definiert. Die wichtigsten Punkte, die zu beachten sind:

 

For Each: Hierbei kann es sich um eine im XPath-Ausdruck genannte Sequenz (z.B.: 1 bis 7) oder um eine Sequenz aus einer XML-Struktur (z.B. wird mit: $XML1/Products/Product eine Sequenz aller Product-Elemente in der Struktur $XML1 ausgewählt; siehe Abbildung oben) handeln. Die For Each-Einstellung kann mit oder ohne die Schleife abbrechen, wenn-Einstellung definiert werden. Wenn keine Schleife abbrechen, wenn-Einstellung definiert ist, so wird die Schleife beendet, wenn alle Iterationen abgeschlossen sind.
Schleifenvariable: Die Schleifenvariable ist die Variable, die das Datenelement der Sequenz, über die gerade iteriert wird, enthält. Die Schleifenvariable wird durch einen Namen bezeichnet, den Sie durch Doppelklick hinter das $-Zeichen und anschließende Eingabe des Namens definieren. In der Abbildung oben wurde die Schleifenvariable MyLoop genannt. Sie wird wie jede andere XPath-Variable durch ein $-Zeichen vor dem Namen ($MyLoop) referenziert. Die Variable befindet sich innerhalb der Schleife in Ihrem Gültigkeitsbereich, d.h. Sie können die Variable in einem XPath-Ausdruck, der sich außerhalb der Schleife befindet, nicht referenzieren. In der Abbildung oben wird die Schleifenvariable in der Einstellung Neuer Node der Aktion "An Node anhängen" referenziert. Dies ist eine gültige Referenz, da die Aktion "An Node anhängen" innerhalb der Schleife erstellt wurde; die Variable befindet sich daher an dieser Stelle im Gültigkeitsbereich. (Sie wird auch in der Einstellung Schleife abbrechen, wenn referenziert).
Schleife abbrechen, wenn: Dieser XPath-Ausdruck wird vor jeder Iteration ausgewertet. Wenn das Ergebnis des Ausdrucks true() ist, so wird die Schleife beendet. Der XPath-Ausdruck $MyLoop='' in der Abbildung oben definiert, dass die Schleife beendet wird, wenn die Auswertung des Inhalts der Variablen $MyLoop einen leeren Inhalt ergibt. Das passiert, wenn das erste leere Product-Element gefunden und in die Variable MyLoop eingesetzt wird.

 

 

Anmerkung: Wenn eine Variable ein Nodeset (d.h. eine Baumstruktur) enthält, wird dieses Nodeset gesperrt und kann von den Aktionen innerhalb der Aktion "Schleife" nicht geändert werden. In der Abbildung oben werden die neuen Nodes, die mit der Aktion "An Node anhängen" hinzugefügt werden, zu einer anderen XML-Struktur ($XML2) hinzugefügt. Sie können jedoch auch die Sequenz, über die iteriert wird, folgendermaßen ändern: Anstatt direkt über die Nodes zu iterieren, wird über eine Zahlensequenz iteriert, die mit der Node-Sequenz verknüpft ist. Anstatt also z.B. über die Sequenz von Product Nodes im Beispiel in der Abbildung oben zu iterieren, können wir über einen Zahlenbereich iterieren, der mit der Node-Sequenz verknüpft ist. Der XPath-Ausdruck der For Each-Einstellungen kann von $XML1/Products/Product in for $i in 1 to count($XML1/Products/Product) return $i geändert werden. Beim Bereich, über den iteriert wird, handelt es sich nun um eine Zahlensequenz. (Der aktuelle Product Node in der Schleife kann mit dem XPath-Ausdruck: $XML1/Products/Product[$i] aufgerufen werden).

 

Die in der Abbildung oben definierten Aktionen erstellen ein dupliziertes Strukturfragment. Wenn die Seite geladen wird, iteriert die Aktion "Schleife" über die $XML1/Products/Product-Elemente. Der aktuelle Produkt-Node wird während jeder Iteration in der Variablen MyLoop gespeichert. Dieser Product-Node (in der Variablen $MyLoop) wird anschließend als das letzte Child des $XML2/Products-Node hinzugefügt. Die Schleife wird fortgesetzt, bis das letzte Product-Element aus $XML1/Products in $XML2/Products kopiert wurde. Siehe Abbildung unten.

MTDLoopDataCopy

 


© 2019 Altova GmbH