2012-01-30 4 views
2
<title> 
<article_title>Land a b c d  Band a /article_title></article_title> 
</title> 

<xsl:value-of select='replace(article_title,"(\s+.\s+)"," ")'/> 

Je m'attends à Land Band mais à la place je reçois la bande terrestre. Quelqu'un peut-il corriger la fonction de remplacement?Comment remplacer tous les caractères d'une chaîne?

Répondre

1

Utilisation:

replace(article_title, '(^[^ ]+)(.+\s+)([^ ]+)$', '$1 $3') 

Voici une transformation complète:

<xsl:template match="/*"> 
    <xsl:value-of select= 
    "replace(article_title, '(^[^ ]+)(.+\s+)([^ ]+)$', '$1 $3')"/> 
</xsl:template> 
</xsl:stylesheet> 

Lorsque cette transformation est appliquée sur le document XML fourni:

<title> 
    <article_title>Land a b c d  Band</article_title> 
</title> 

le résultat recherché, est produit correct:

Land Band 
+0

Dimitre, merci. Puis-je obtenir une solution pour cela dans xslt 1.0 sans l'utilisation de la fonction de remplacement. – sanjay

+0

@sanjay - Oui, XSLT 1.0 est complet à Turing. Cependant, la solution sera beaucoup plus compliquée, car XSLT 1.0 ne dispose pas du support de RegEx. Pour le traitement de texte dans XSLT 1.0, j'utilise souvent la librairie FXSL, qui offre un ensemble commode de modèles/fonctions et des fonctions d'ordre supérieur (HOF). Dans le cas où vous êtes intéressé, posez une nouvelle question et n'utilisez pas cette fois la balise xslt-2.0 (spécifier la balise xslt-1.0 sera approprié). –

Questions connexes