JanineS: XSL | index-of

Beitrag lesen

Hallo SelfHTML-Community, hallo Thomas (da du mir in der Vergangenheit schon oft und gut geholfen hast!),

ich möchte mit XSL gerne abprüfen, ob in einer bestimmten Zeichenkette wiederkehrender Elemente eine Abkürzung aus einer Liste auftaucht. Die Abkürzung wird stets in Klammern geschrieben. Die Quelldatei sieht (stark vereinfacht) in etwa so aus:

<?xml version="1.0" encoding="UTF-8"?>
<all>
	<abbreviations>
			<abbr>ABG</abbr>
			<abbr>AGI</abbr>
			<abbr>BBL</abbr>
			<abbr>ECK</abbr>
	</abbreviations>
	<documents>
		<doc no="1">In diesem Doc taucht die Abkürzung (ABG) auf.</doc>
		<doc no="2">Dieses Doc besitzt keine Abkürzung.</doc>
		<doc no="3">Noch eine Abkürzung (BBL).</doc>
		<doc no="4">Und hier (ECK).</doc>
		<doc no="5">Und hier nochmal (ECK).</doc>
	</documents>
</all>

Nur leider habe ich noch irgendwo einen Fehler beim index-of. Vielleicht sehen die Geübteren von euch gleich, woran es bei mir hakt. Ich grübel seit gestern abend und finde keine Lösung :(

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" version="2.0">
	<xsl:output method="xml" encoding="UTF-8"/>
	<xsl:template match="all">
		<xsl:variable name="abbr" select="abbreviations/abbr"/>
		<all>
			<xsl:for-each select="//doc">
				<xsl:variable name="actdoc" select="."/>
				<xsl:if test="fn:contains($actdoc, fn:index-of($abbr, $actdoc))">
					<doc>
						<xsl:attribute name="no"><xsl:value-of select="@no"/></xsl:attribute>
						<xsl:value-of select="$actdoc"/>
					</doc>
				</xsl:if>
			</xsl:for-each>
		</all>
	</xsl:template>
</xsl:stylesheet>

Die Ausgabe sollte in etwa so aussehen:

<all>
	<doc no="1">ABG</doc>
	<doc no="3">BBL</doc>
	<doc no="4">ECK</doc>
	<doc no="5">ECK</doc>
</all>

Danke schonmal für eure Hilfe! Viele Grüße Janine S.

akzeptierte Antworten