XPath 3.0, XPath 2.0, XPath 1.0 / XPath Funktionen / XPath: Sequence-Funktionen / XPath: subsequence

XPath: subsequence

XPath: subsequence

➪ Die "subsequence"-Funktion kann aus einer Sequenz einzelne Teile filtern, die sich über die Position und die Anzahl der Items definiert.

Die Position eines Items läßt sich (sofern nicht bekannt) über die "index-of"-Funktion ermitteln. Zur Verdeutlichung deklarieren wir uns eine Variable "vseq", die auch bei der "index-of"-Funktion verwendet wurde.


<xsl:variable 
     name="vseq" 
     select="//Mensch[contains(name, 'e')]" 
     as="item()*"/>

Zur Demonstration wird die Sequenz selber ausgegeben; hilfsweise wird hierfür ein separates Template "out" verwendet (siehe unten), dem die Sequenz $vseq als Parameter "pseq" übergeben wird (in beiden Fällen handelt es sich um eine Itemliste, die grundsätzlich auch leer sein kann: item()*).


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

Resultat:


<m nr="1">Herzlos</m>
<m nr="2">Wertlos</m>
<m nr="3">Ruhelos</m>
<m nr="4">Rielos</m>
<m nr="5">Bodenlos</m>
<m nr="6">Muehelos</m>
<m nr="7">Leinenlos</m>

Starten wir nun mit der "subsequence" ab der 3. Position, so beginnt die Ausgabe bei "Ruhelos".


<xsl:call-template name="out">
    <xsl:with-param name="pseq" select="subsequence($vseq, 3)"/>
</xsl:call-template>  

Resultat:


<m nr="1">Ruhelos</m>
<m nr="2">Rielos</m>
<m nr="3">Bodenlos</m>
<m nr="4">Muehelos</m>
<m nr="5">Leinenlos</m>

Dasselbe Ergebnis erhalten wir durch Verwendung von "index-of":


<xsl:call-template name="out">
    <xsl:with-param name="pseq" 
      select="subsequence($vseq, 
                          index-of($vseq/name, 'Ruhelos'))"/>
</xsl:call-template>

"subsequence" hat optional drei Parameter: der erste ist die ursprüngliche Sequenz, der zweite Parameter stellt den Beginnindex dar (muß also eine Zahl sein!), der dritte Parameter definiert die Anzahl der Items.


<xsl:call-template name="out">
    <xsl:with-param 
         name="pseq" 
         select="subsequence($vseq, 2, 3)"/>
</xsl:call-template>

Resultat:


<m nr="1">Wertlos</m>
<m nr="2">Ruhelos</m>
<m nr="3">Rielos</m>

Hier finden wir noch einmal das oben aufgerufene Template zur Ausgabe.


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

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/subsequence.html