93 votes

Remplacement de chaîne XSLT

Je ne connais pas vraiment XSL mais j'ai besoin de corriger ce code, je l'ai réduit pour le rendre plus simple.
J'obtiens cette erreur

Fonction XSLT/XPath non valide

sur cette ligne

<xsl:variable name="text" select="replace($text,'a','b')"/>

C'est le XSL

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:inm="http://www.inmagic.com/webpublisher/query" version="1.0">
    <xsl:output method="text" encoding="UTF-8" />

    <xsl:preserve-space elements="*" />
    <xsl:template match="text()" />

    <xsl:template match="mos">
        <xsl:apply-templates />

        <xsl:for-each select="mosObj">
          'Notes or subject' 
           <xsl:call-template
                name="rem-html">
                <xsl:with-param name="text" select="SBS_ABSTRACT" />
            </xsl:call-template>
        </xsl:for-each>
    </xsl:template>

    <xsl:template name="rem-html">
        <xsl:param name="text" />
        <xsl:variable name="text" select="replace($text, 'a', 'b')" />
    </xsl:template>
</xsl:stylesheet>

Quelqu'un peut-il me dire ce qui ne va pas ?

0 votes

Veuillez noter que le replace() est disponible à partir de XPath 2.0 (et donc XSLT 2.0) et prend en charge les remplacements d'expressions régulières.

0voto

Chesare Points 103

La rouine est assez bonne, mais elle fait que mon application se bloque, j'ai donc dû ajouter le boîtier :

  <xsl:when test="$text = '' or $replace = ''or not($replace)" >
    <xsl:value-of select="$text" />
    <!-- Prevent thsi routine from hanging -->
  </xsl:when>

avant que la fonction ne soit appelée de manière récursive.

J'ai trouvé la réponse ici : Lorsque le test est suspendu dans une boucle infinie

Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X