Gern stehe ich zur fachlichen Unterstützung in XML-Technologien, C#.NET, VisualBasic.NET und Java zur Verfügung. Sprechen Sie mich einfach an: Mail oder ☎ 0151 . 750 360 61


XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-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, sodass im Ergebnis eine neue Sequenz entsteht.

Auf dieser Seite:

Zur Erläuterung nehme ich 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 dritten Position von $vseq1 die zweite Sequenz $vseq2 ein. (Natürlich lässt 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ässt vermuten, dass es auch eine insert-after-Funktion gibt. Leider nein. Um im obigen Beispiel den Effekt trotzdem zu erzielen, müßten Sie sich freilich der Übung unterziehen, bei Verwendung von insert-before den Indexwert "3" um "1" zu erhöhen.

wg / 4. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.




JSON



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