(aktualisiert!)

IT-Trainings in Zeiten des Corona-Virus, Veranstaltungstipps der www.gfu.net:
Schulung XML Einfuehrung und Grundlagen *** Schulung Python fuer Programmiereinsteiger *** Schulung XML, XSLT, XPath, XSL-FO Einfuehrung *** Schulung Java/JSP/HTML/JDBC/XML Komplett *** Schulung XML mit Altova XMLSpy *** Schulung XML Grundlagen, XSL-FO, SVG, DocBook, DITA *** Schulung XML - der professionelle Ueberblick *** Schulung XML-Schema Intensiv *** Schulung Einstieg in die Programmierung *** Schulung C++ fuer Programmiereinsteiger *** Schulung VB.NET fuer Visual Basic-Programmierer ***


XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-Funktionen / XPath: remove

XPath: remove

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 () und (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>

Alternative in XPath 3.0 / XQuery

... zum einfachen Verständnis ohne Nummerierung:


//Mensch[contains(name, 'e')] 
=> remove(5) 
=> for-each( 
    function($w)
    { 
      element {'m'}{
        $w/name/text()  
      }    
    } 
)

Resultat:


<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>

Arbeiten mit index-of

Der Indexwert "5" lässt sich auch über 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')] )

Das Template out

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.






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