ThomasM: invertierten Text löschen

Beitrag lesen

Hallo Elo,

Mein Problem, die <data>Elemente sollen danach nur entweder "eins", "sieben" oder "eins, sieben" enthalten - also der ungewünschte Text soll gelöscht werden.

XSLT-2.0-Ansatz:

<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="2.0"  
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
  xmlns:xs="http://www.w3.org/2001/XMLSchema"  
  xmlns:fn="http://www.w3.org/2005/xpath-functions"  
  exclude-result-prefixes="fn xs">  
  
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  
  
  <!-- Suchparameter kann ggf. von außen übergeben werden -->  
  <xsl:param name="search_txt" select="'eins,sieben'"/>  
  
  <xsl:variable name="search_seq" as="xs:string*">  
    <xsl:sequence select="fn:tokenize($search_txt,',')"/>  
  </xsl:variable>  
  
  <xsl:template match="root">  
    <root>  
      <xsl:apply-templates select="data"/>  
    </root>  
  </xsl:template>  
  
  <xsl:template match="data">  
    <xsl:variable name="data_out">  
      <xsl:sequence select="for $i in 1 to fn:count($search_seq)  
        return if(fn:contains(.,$search_seq[$i])) then $search_seq[$i] else()"/>  
    </xsl:variable>  
  
    <xsl:for-each select="$data_out">  
      <xsl:if test="fn:string-length(.) > 0">  
        <data><xsl:value-of select="fn:replace(.,' ',', ')"/></data>  
      </xsl:if>  
    </xsl:for-each>  
  </xsl:template>  
  
</xsl:stylesheet>

Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>  
<root>  
   <data>eins, sieben</data>  
   <data>sieben</data>  
   <data>sieben</data>  
   <data>eins, sieben</data>  
   <data>sieben</data>  
   <data>eins, sieben</data>  
   <data>sieben</data>  
</root>

Grüße,
Thomas