XPath / XPath-Funktionen / XPath: Sequenz-Funktionen / XPath: remove
![]() |
![]() |
➪ Die remove-Funktion löscht bestimmte Items (die sich aus ihrer Indexposition ergeben) aus einer Sequenz.
Auf dieser Seite:Zur Demonstration verwende ich auch hier eine Sequenzvariable "vseq", die sich aus einer vorab gefilterten (contains) und sortierten (xsl:sort select="Gehalt") Itemliste ergibt.
<xsl:variable name="vseq" as="item()*" >
<xsl:for-each
select="//Mensch[contains(name, 'e')]">
<xsl:sort
select="Gehalt"
data-type="number"
order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:variable>
Die Normalliste ergibt folgendes Ergebnis:
<xsl:call-template name="out">
<xsl:with-param
name="pseq"
select="$vseq"/>
</xsl:call-template>
Resultat:
<m nr="1">Leinenlos</m>
<m nr="2">Muehelos</m>
<m nr="3">Ruhelos</m>
<m nr="4">Rielos</m>
<m nr="5">Herzlos</m>
<m nr="6">Wertlos</m>
<m nr="7">Bodenlos</m>
Löscht man nun mittels remove den Index "5", so erscheint die Liste ohne den vorherigen Eintrag "Herzlos".
<xsl:call-template name="out">
<xsl:with-param
name="pseq"
select="remove($vseq, 5)"/>
</xsl:call-template>
... zum einfachen Verständnis ohne Nummerierung:
//Mensch[contains(name, 'e')]
=> remove(5)
=> for-each(
function($w)
{
element {'m'}{
$w/name/text()
}
}
)
<m nr="1">Leinenlos</m>
<m nr="2">Muehelos</m>
<m nr="3">Ruhelos</m>
<m nr="4">Rielos</m>
<m nr="5">Wertlos</m>
<m nr="6">Bodenlos</m>
Der Indexwert "5" lässt sich auch über index-of ermitteln:
<xsl:call-template name="out">
<xsl:with-param name="pseq"
select="remove($vseq,
index-of($vseq/name, 'Herzlos'))"/>
</xsl:call-template>
Alternative in XPath 3.0 / XQuery:
function($sequence){
$sequence
=> remove(
$sequence/name/text() => index-of('Herzlos')
)
=> for-each(
function($w)
{
element {'m'}{
$w/name/text()
}
}
)
}(//Mensch[contains(name, 'e')] )
Zur Vervollständigung auch hier das aufgerufene Template "out".
<xsl:template name="out">
<xsl:param name="pseq" as="item()*"/>
<xsl:for-each select="$pseq">
<m nr="{position()}">
<xsl:value-of select="name"/>
</m>
</xsl:for-each>
</xsl:template>
wg / 3. April 2020
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de