2012-01-30 97 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+)"," ")'/> 

我期待Land Band,但是我得到了Land b d乐队。 有人可以更正替换功能吗?如何从字符串中替换所有单个字符?

回答

1

使用

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

这是一个完整的转型

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

当这种变换所提供的XML文档应用:

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

想要的,正确的结果产生

Land Band 
+0

Dimitre,谢谢。我可以在没有使用替换函数的情况下在xslt 1.0中获得此解决方案。 – sanjay 2012-02-01 04:16:29

+0

@sanjay - 是的,XSLT 1.0是图灵完成的。然而,解决方案将更加复杂,因为XSLT 1.0缺乏RegEx支持。对于XSLT 1.0中的文本处理,我经常使用FXSL库,它提供了一套方便的模板/函数和高阶函数(HOF)。如果您有兴趣,请提出一个新问题,这次不要使用xslt-2.0标签(指定xslt-1.0标签是合适的)。 – 2012-02-01 04:23:35

相关问题