fn:insert-before
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
Kategorie: Funktionen für Sequenzen
Rückgabewert: Eine Sequenz; eine neue Sequenz aus der Kopie der Eingabesequenz, in welche vor der bezeichneten Indexposition die als drittes Argument übergebene Sequenz eingefügt wurde.
Aufruf/Argumente:
fn:insert-before($eingabesequenz, $indexangabe, $einschubsequenz)
$eingabesequenz:
Obligatorisch. Eine Sequenz aus einer beliebigen Zahl von Items, in deren Kopie die als drittes Argument übergebene Einschubsequenz eingefügt wird.
indexangabe:
Obligatorisch. Eine (im Prinzip positive) Ganzzahl xs:integer, welche die Indexposition bezeichnet, vor der die Einschubsequenz in die Eingabesequenz eingefügt wird.
$einschubsequenz:
Obligatorisch. Eine Sequenz aus einer beliebigen Zahl von Items, die vor der übergebenen Indexposition in die als erstes Argument übergebene Eingabesequenz eingefügt wird.
Verwendungszweck:
Die Funktion erzeugt aus beiden ihr übergebenen Sequenzen eine neue Sequenz, indem sie die zweite Sequenz vor der übergebenen Indexposition in eine Kopie der als erstes Argument übergebenen Sequenz einfügt.
Die Anzahl der Items der Ergebnissequenz entspricht stets der Summe der Items beider übergebener Sequenzen. Die Typen der Items der zurückgegebenen Sequenz entsprechen unverändert den Typen der korrespondierenden Items der Eingabesequenzen.
Die als zweites Argument übergebene Indexziffer soll eine ganze, positive Zahl sein. Ist der übergebene Wert kleiner oder gleich 0, so wird er ignoriert und statt dessen der Wert 1 angenommen. Die Items der Einschubsequenz werden in diesem Fall vor dem ersten Item der Eingabesequenz eingefügt.
Ist der übergebene Wert größer als die Zahl der Items in der Eingabesequenz des ersten Arguments, so wird der Wert ignoriert und statt dessen die Länge der Eingabesequenz +1 angenommen. Die Items der Einschubsequenz werden in diesem Fall nach dem letzten Item der Eingabesequenz angehängt (exakter ausgedrückt: vor der n+1-ten Indexnummer eingefügt, bei n Items in der Eingabesequenz).
Ist die erste Sequenz leer, so wird die Einschubsequenz zurückgegeben. Ist dagegen die einzufügende Sequenz leer, so wird eine Kopie der unveränderten ersten Sequenz zurückgegeben. Sind beide Sequenzen leer, so gibt die Funktion naheliegenderweise eine leere Ergebnissequenz zurück.
Beispiele:
Beispiel 1 – Einfügen einer Sequenz:
fn:insert-before( ('a', 'b', 'c'),
2,
(1, 2, 3)
)
ergibt ('a', 1, 2, 3, 'b', 'c').
Die zweite Sequenz wird vor der übergebenen Indexposition 2 in die erste eingefügt und die Gesamtsequenz als neue Sequenz zurückgegeben.
Beispiel 2 – Indexangabe außerhalb des erlaubten Bereichs, Version 1:
fn:insert-before( ('a', 'b', 'c'),
0,
(1, 2, 3)
)
ergibt (1, 2, 3, 'a', 'b', 'c').
Die zweite Sequenz wird vor dem ersten Item der ersten Sequenz eingefügt und die Gesamtsequenz zurückgegeben. Die eigentlich übergebene Indexangabe von 0 wird durch 1 ersetzt.
Beispiel 3 – Indexangabe außerhalb des erlaubten Bereichs, Version 2:
fn:insert-before( ('a', 'b', 'c'),
7,
(1, 2, 3)
)
ergibt ('a', 'b', 'c', 1, 2, 3).
Die zweite Sequenz wird nach dem letzten Item der ersten Sequenz eingefügt und die Gesamtsequenz zurückgegeben. Die eigentlich übergebene Indexangabe von 7 wird durch 4 (Länge der ersten Sequenz + 1) ersetzt.
Beispiel 4 – Alternativen zu fn:insert-before:
Sollen zwei Sequenzen $sequenz_a und $sequenz_b lediglich aneinander gehängt werden, so kann dies auch einfach mit Hilfe des Komma-Operators geschehen. Der Ausdruck
($sequenz_a, $sequenz_b)
konstruiert eine neue Sequenz, die aus den Items von $sequenz_a gefolgt von den Items von $sequenz_b besteht. Die Verwendung der Funktion fn:insert-before() ist in diesem Fall nicht erforderlich bzw. wäre unnötig kompliziert.
Funktionsdefinition:
XPath 1.0:
Funktion nicht verfügbar
fn:insert-before($target as item()*,
$position as xs:integer,
$inserts as item()*) as item()*
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Galileo Press, Rheinwerkallee 4, 53227 Bonn