2010-12-08 11 views
0

J'ai un nœud qui ressemble à ceci:remplacer sur une sous-chaîne valeur de l'élément xml

<EmailBody> &lt;p&gt;Ticket {$Tckt_Cd$}&lt;/p&gt </EmailBody> 

Avec XSLT, il peut remplacer la valeur {$ Tckt_Cd $} avec un paramètre? Je ne suis pas très bien avec XSLT, donc toute aide serait géniale.

+0

La réponse simple est oui. Mais les réponses peuvent devenir complexes si le paramètre contient des valeurs pour plus d'un repère et si les repères peuvent être plusieurs fois dans un nœud de texte. –

Répondre

1

vous pouvez aussi faire quelque chose le long des lignes de

<xsl:variable name="VarA"> 
<xsl:value-of select="substring-before(substring-after(EmailBody,'{'),'}')"/> 
</xsl:variable> 

<xsl:choose> 
<xsl:when test="$varA='$Tckt_Cd$'"> 
your replacement here 
</xsl:when> 
</xsl:choose> 

alors si vous avez différents noms de variables, vous pouvez changer la valeur assez facilement

+0

J'ai pris cela et ajouté le modèle du corps de l'e-mail au XSLT. Puis a fait le remplacement de XPath. – Arnej65

0

Vous devriez probablement utiliser des expressions régulières si XSLT 2.0 ou EXSLT est disponible.

Le code suivant est une solution XSLT 1.0 pure.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="some-param" select=" 'ololo' "/> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="EmailBody"> 
    <xsl:copy> 
     <xsl:value-of select="substring-before(., '{$Tckt_Cd$}')"/> 
     <xsl:value-of select="$some-param"/> 
     <xsl:value-of select="substring-after(., '{$Tckt_Cd$}')"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

Utilisé avec un valide entrée XML:

<root> 
    <EmailBody> &lt;lt;p&lt;gt;Ticket {$Tckt_Cd$}&lt;lt;/p&lt;gt </EmailBody> 
</root> 

produit ce résultat:

<root> 
    <EmailBody> &lt;lt;p&lt;gt;Ticket ololo&lt;lt;/p&lt;gt </EmailBody> 
</root> 
Questions connexes