ThomasM: XSL | Satz in einzelne Wörter zerlegen

Beitrag lesen

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