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