2012-01-30 129 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

相關問題