XSLT string replace

Realmente no conozco XSL pero necesito corregir este código, lo he reducido para hacerlo más simple.
Estoy recibiendo este error

Función XSLT / XPath inválida

en esta linea

 

Este es el XSL

        'Notes or subject'           

¿Alguien puede decirme qué pasa con eso?

    replace no está disponible para XSLT 1.0.

    Codesling tiene una plantilla para reemplazar cadena que puede usar como sustituto de la función:

                            

    invocado como:

            

    Por otro lado, si literalmente solo necesitas reemplazar un personaje por otro, puedes llamar a translate que tiene una firma similar. Algo así debería funcionar bien:

      

    Además, tenga en cuenta que, en este ejemplo, cambié el nombre de la variable a “newtext”, en XSLT las variables son inmutables, por lo que no puede hacer el equivalente de $foo = $foo como lo hizo en su código original.

    Aquí está la función XSLT que funcionará de forma similar a la función String.Replace () de C #.

    Esta plantilla tiene los 3 parámetros como abajo

    texto : su cadena principal

    reemplazar : – la cadena que desea reemplazar

    por : – la cadena que responderá por una nueva cadena

    A continuación están la plantilla

                        

    La muestra siguiente muestra cómo llamarlo

            

    También puede consultar la siguiente URL para conocer los detalles.

    Nota: En caso de que desee utilizar el algoritmo ya mencionado para casos en los que necesite reemplazar un gran número de instancias en la cadena de origen (por ejemplo, nuevas líneas en texto largo), es muy probable que termine con StackOverflowException debido a la llamada recursiva

    Resolví este problema gracias a la incrustación incorporada de Xalan (no se veía cómo hacerlo en Saxon ):

      ...  ...  

    Puede usar el siguiente código cuando su procesador se ejecuta en .NET o usa MSXML (a diferencia de los procesadores nativos basados ​​en Java u otros). Utiliza msxsl:script .

    Asegúrese de agregar el espacio de nombres xmlns:msxsl="urn:schemas-microsoft-com:xslt" a su raíz xsl:stylesheet o xsl:transform element.

    Además, vincula la outlet a cualquier espacio de nombre que desees, por ejemplo xmlns:outlet = "http://my.functions" .

      function replace_str(str_text,str_replace,str_by) { return str_text.replace(str_replace,str_by); }   

    La rouine es bastante buena, sin embargo hace que mi aplicación se cuelgue, así que necesitaba agregar la funda:

          

    antes de que la función sea llamada recursivamente.

    Obtuve la respuesta de aquí: cuando la prueba colgaba en un ciclo infinito

    ¡Gracias!