2010-03-11 5 views
3

Je suis nouveau dans XSLT pour le 'PrimarySubject' ci-dessous. Je dois remplacer les caractères '&' par% 26 et les caractères '' par% 20 'qu'il contient.Analyse de chaîne XSLT

<xsl:template name="BuildLink"> 
    <xsl:param name="PrimarySubject" /> 
    <xsl:text>?PrimarySubject=</xsl:text> 
    <xsl:value-of select="$PrimarySubject" /> 
</xsl:template> 

Y at-il une fonction de remplacement de chaîne que je peux utiliser dans la version 1 de xslt? Merci,

+0

Ah, je vois, vous essayez ma suggestion implémenter un encodeur URI dans XSLT ;-) – Boldewyn

Répondre

3

Cela peut se faire plus facilement en utilisant la FXSL Library, plus e xactly son str-map modèle.

Voici un exemple simple.

Cette transformation:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:testmap="testmap" 
exclude-result-prefixes="xsl testmap" 
> 
    <xsl:import href="str-map.xsl"/> 

    <!-- to be applied on any xml source --> 

    <testmap:testmap/> 

    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="/"> 
    <xsl:variable name="vTestMap" select="document('')/*/testmap:*[1]"/> 
    <xsl:call-template name="str-map"> 
     <xsl:with-param name="pFun" select="$vTestMap"/> 
     <xsl:with-param name="pStr" select="'abc&amp;d f'"/> 
    </xsl:call-template> 
    </xsl:template> 

    <xsl:template match="testmap:*"> 
     <xsl:param name="arg1"/> 

     <xsl:choose> 
     <xsl:when test="$arg1 = '&amp;'">%26</xsl:when> 
     <xsl:when test="$arg1 = ' '">%20</xsl:when> 
     <xsl:otherwise><xsl:value-of select="$arg1"/></xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 

lorsqu'il est appliqué sur tout document XML (non utilisé), produit le résultat recherché:

abc%26d%20f

+1

Mieux vaut utiliser une bibliothèque que quelqu'un d'autre a écrite, économisez un peu de temps dans le "Je n'ai pas pensé à cette situation". – Nat

+0

@Nat, Bien sûr, les utilisateurs de FXSL rarement, voire pas du tout, besoin d'implémenter la récursivité eux-mêmes. –

+1

Nice post +1 [15 caractères] –

0

Il y a several substring fonctions XSLT:

  • substring-before chaîne (string, string)
  • substring-après chaîne (string, string)
  • sous-chaîne string (chaîne, nombre , numéro?)