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.

XPath: subsequence

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>

<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 / 3. Oktober 2017



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

Mobil: 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/subsequence.html