Substituição de string XSLT

Eu realmente não sei XSL, mas eu preciso corrigir esse código, eu reduzi para simplificar.
Estou recebendo este erro

Função XSLT / XPath inválida

nesta linha

 

Este é o XSL

        'Notes or subject'           

Alguém pode me dizer o que há de errado com isso?

replace não está disponível para o XSLT 1.0.

Codesling tem um template para string-replace que você pode usar como um substituto para a function:

                        

chamado como:

        

Por outro lado, se você literalmente só precisar replace um caractere por outro, poderá chamar translate que possui uma assinatura semelhante. Algo como isso deve funcionar bem:

  

Além disso, observe, neste exemplo, eu mudei o nome da variável para “newtext”, em variables ​​XSLT são imutáveis, então você não pode fazer o equivalente a $foo = $foo como você tinha em seu código original.

Aqui está a function XSLT que funcionará de forma semelhante à function String.Replace () do C #.

Este modelo tem os 3 parâmetros como abaixo

text : – sua string principal

replace : – a string que você deseja replace

por : – a string que responderá por nova string

Abaixo estão os modelos

                    

Abaixo exemplo mostra como chamá-lo

        

Você também pode consultar o URL abaixo para os detalhes.

Nota: Caso você deseje usar o algoritmo já mencionado para casos em que é necessário replace um grande número de instâncias na string de origem (por exemplo, novas linhas em texto descritivo), há grande probabilidade de que você acabe com StackOverflowException devido à chamada recursiva.

Eu resolvi este problema graças à incorporação embutida do tipo Java do Xalan (não parece como fazê-lo no Saxon ):

  ...  ...  

Você pode usar o código a seguir quando o processador for executado no .NET ou usar o MSXML (em oposição a processadores baseados em Java ou outros processadores nativos). Ele usa msxsl:script .

Certifique-se de adicionar o namespace xmlns:msxsl="urn:schemas-microsoft-com:xslt" ao elemento xsl:stylesheet ou xsl:transform raiz.

Além disso, vincule a outlet a qualquer namespace que você goste, por exemplo, xmlns:outlet = "http://my.functions" .

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

O rouine é muito bom, mas faz com que meu aplicativo seja interrompido, então precisei adicionar o caso:

      

antes que a function seja chamada recursivamente.

Eu tenho a resposta daqui: Quando o teste pendurado em um loop infinito

Obrigado!