XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-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ässt sich (sofern nicht bekannt) über die -Funktion ermitteln. Zur Verdeutlichung deklarieren Sie eine Variable vseq.


<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 Sie nun mit der subsequence ab der dritten 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 Sie 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 (muss 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 Sie 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 / 4. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






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