Comment remplacer un nœud-nom avec un autre dans Xslt?

Mauvaise formulation de la question, désolé. Vais essayer d'expliquer ce que je suis en train de faire.
Fondamentalement, j'ai la sortie à partir d'une recherche, Xml et Xml il existe un nœud comme celui-ci:

<FIELD NAME="body">
  Somebody named 
  <key>Doris</key> 
  and 
  <key>Arnie</key> 
</FIELD>

En bref, ce que j'ai besoin est de remplacer "<key>" par "<strong>"; c'est à dire. mettre en évidence les résultats de recherche (la clé des valeurs de nœud sont ce que l'utilisateur recherché). Dans le Xslt je ne sais pas ce que l'utilisateur a consulté à partir de, autres que l'interrogation Xml -> CHAMP[@name='corps']/touche.

Droit maintenant, j'ai quelques fous code qui va extraire tout ce qui est en face de la durée de recherche ("Doris"), mais qui ony fonctionne pour 1 terme de recherche. Nous en avons besoin pour ce faire de plusieurs termes. Le code que nous utilisons ressemble à ceci:

  <xsl:template name="highlighter">
    <xsl:param name="text"/>
    <xsl:param name="what"/>

    <xsl:choose>
      <xsl:when test="contains($text, $what) and string-length($what) &gt; 0">
        <xsl:variable name="before" select="substring-before($text, $what)"/>
        <xsl:variable name="after" select="substring-after($text, $what)"/>
        <xsl:variable name="real-before" select="substring($text, 1, string-length($before))"/>
        <xsl:variable name="real-what" select="substring($text, string-length($before) + 1, string-length($what))"/>
        <xsl:variable name="real-after" select="substring($text, string-length($before) + string-length($what) + 1)"/>
        <xsl:value-of select="$real-before"/>

        <strong>
          <xsl:value-of select="$real-what"/>
        </strong>

        <xsl:call-template name="highlighter">
          <xsl:with-param name="text" select="$real-after"/>
          <xsl:with-param name="what" select="$what"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

Ce que j'ai essayé de faire est d'appeler ce code plusieurs fois avec les différents termes de recherche, mais je suis struggeling sur la façon d'utiliser la sortie de l'appel pour le modèle d'entrée pour le prochain appel. Dans le code, il serait quelque chose comme ceci:

string body = doc.SelectSingleNode("FIELD[@NAME='body']");
NodeCollection nodes = doc.SelectNodes("FIELD[@NAME='body']/key");
foreach (var node in nodes) {
    body = hightlighter(body, node.InnerText);   
}

Jusqu'à présent j'ai été incapable de faire quelque chose comme cela dans XSLT, mais je suis encore un noob, donc... 😉

Edit: Juste pour clarifier la sortie, je suis à la recherche d'est: est-ce

Somebody named <strong>Doris</strong> and <strong>Arnie</strong>

OriginalL'auteur noocyte | 2009-12-18