XPath 3.0, XPath 2.0, XPath 1.0 / XPath Funktionen / XPath: Sequence-Funktionen / XPath: insert-before

XPath: insert-before

XPath: insert-before

➪ Die "insert-before"-Funktion fügt ab einer bestimmten Position zusätzliche Items in eine ursprüngliche Sequenz ein, so daß im Ergebnis eine neue Sequenz entsteht.

Zur Erläuterung nehmen wir dieses Mal zwei Sequenzen: in der ersten stecken nur Mensch-Items mit Gehältern über 1000, in der zweiten Mensch-Items mit Gehältern unterhalb 500.


<xsl:variable name="vseq1" as="item()*" 
     select="//Mensch[Gehalt &gt; 1000]"/>
<xsl:variable name="vseq2" as="item()*" 
     select="//Mensch[Gehalt &lt; 500]"/>

Zum Vergleich die Ursprungsliste $vseq1:


<xsl:call-template name="out">
  <xsl:with-param 
       name="pseq" 
       select="$vseq1"/>
</xsl:call-template>

Resultat:


<m nr="1" Gehalt="1234.56">Nixlos</m>
<m nr="2" Gehalt="5430">Sprachlos</m>
<m nr="3" Gehalt="6789">Wasistlos</m>
<m nr="4" Gehalt="3450">Bodenlos</m>

"insert-before" fügt nun ab der 3. Position von $vseq1 die zweite Sequenz $vseq2 ein. (Natürlich läßt sich zum Auffinden der korrekten Position die "index-of"-Funktion verwenden.)


 <xsl:call-template name="out">
     <xsl:with-param name="pseq" 
        select="insert-before($vseq1, 3, $vseq2)"/>    
 </xsl:call-template>

Resultat:


<m nr="1" Gehalt="1234.56">Nixlos</m>
<m nr="2" Gehalt="5430">Sprachlos</m>
<m nr="3" Gehalt="234.56">Holzflos</m>
<m nr="4" Gehalt="321.45">Sagblos</m>
<m nr="5" Gehalt="333.33">Rhodos</m>
<m nr="6" Gehalt="456">Kolos</m>
<m nr="7" Gehalt="357">Lustlos</m>
<m nr="8" Gehalt="234">Ruhelos</m>
<m nr="9" Gehalt="321">Schlaflos</m>
<m nr="10" Gehalt="456">Rielos</m>
<m nr="11" Gehalt="222">Muehelos</m>
<m nr="12" Gehalt="135">Leinenlos</m>
<m nr="13" Gehalt="6789">Wasistlos</m>
<m nr="14" Gehalt="3450">Bodenlos</m>

Und auch hier zur Vervollständigung das aufgerufene Template "out":


<xsl:template name="out">
    <xsl:param name="pseq" as="item()*"/>
    <xsl:for-each select="$pseq">
      <m nr="{position()}" 
          Gehalt="{Gehalt}">
        <xsl:value-of select="name"/>
      </m>
    </xsl:for-each>
</xsl:template>

insert-after

Die "insert-before"-Funktion läßt vermuten, daß es auch eine "insert-after"-Funktion gibt. Leider nein. Um den Effekt trotzdem zu erzielen, müßten wir uns freilich der aufwändigen und fast unzumutbaren Übung unterziehen, bei Verwendung von "insert-before" den Indexwert "3" um "1" zu erhöhen.

wg / 8. Februar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/insertbefore.html