Hallo Janine,
hier ein Ansatz, der noch nicht ganz perfekt funktioniert und auf einzelne Textknoten fokussiert. Insofern wird "Abhilfemaßnahme (FDA)" (= zwei Textknoten) nicht verlinkt. Also ggf. noch weiter modifizieren.
<?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"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:variable name="terms" select="//def/term"/>
<xsl:template match="definitions">
<definitions>
<xsl:apply-templates select="def"/>
</definitions>
</xsl:template>
<xsl:template match="def">
<def>
<term><xsl:value-of select="term"/></term>
<descr>
<xsl:apply-templates select="descr" mode="term">
<xsl:with-param name="terms" as="xs:string+" select="$terms"/>
</xsl:apply-templates>
</descr>
</def>
</xsl:template>
<xsl:template match="text()" mode="term">
<xsl:param name="terms" as="xs:string+"/>
<xsl:analyze-string select="." regex="{fn:string-join($terms, '|')}">
<xsl:matching-substring>
<a href="{.}"><xsl:value-of select="."/></a>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<definitions>
<def>
<term>Abhilfemaßnahme (FDA)</term>
<descr><a href="Routine">Routine</a>-Instandhaltung oder Wartung eines <a href="Gerät">Gerät</a>es etc.</descr>
</def>
<def>
<term>Routine</term>
<descr>Hier taucht der Begriff Abhilfemaßnahme (FDA) auf.</descr>
</def>
<def>
<term>Gerät</term>
<descr>Dies ist ein Test für <a href="Routine">Routine</a> und Abhilfemaßnahme (FDA).</descr>
</def>
</definitions>
Grüße,
Thomas