2009-06-18 78 views
3

基本上我有一個由逗號分隔的循環創建的字符串,例如。 A,B,C, 我想擺脫最後一個逗號。子串,xslt中的字符串長度函數

<xsl:variable name="myConcatString"> 
    <xsl:for-each select="valueinElement"> 
     <xsl:value-of select="@attributeValue"/>, 
    </xsl:for-each> 
</xsl:variable> 


<xsl:variable name="valueLength" select="string-length($myConcatString)-1"/> 
<xsl:value-of select="substring($myConcatString,1,$valueLength)"/> 

現在最後一行應該給我沒有「,」在最後的A,B,C。有人能告訴我發生了什麼問題嗎?

回答

7

由於您格式化XML的方式,您正在輸出空格。你可以用兩種方法解決它。一種是隻刪除格式:

<xsl:for-each select="valueinElement"><xsl:value-of select="@attributeValue"/>,</xsl:for-each> 

其他的,更強大的方法是改變你正在處理空白的方式:

<xsl:for-each select="valueinElement"> 
    <xsl:value-of select="@attributeValue"/> 
    <xsl:text>,</xsl:text> 
</xsl:for-each> 

這是什麼東西做的是治療只是逗號作爲元素,以便忽略周圍的空白,而不是將for-each循環內部的所有空白處理爲輸出的一部分。

僅供參考,我遇上了下面的XML文件上面的XSLT片段:

<root> 
    <valueinElement attributeValue="dogs"/> 
    <valueinElement attributeValue="cats"/> 
    <valueinElement attributeValue="mice"/> 
    <valueinElement attributeValue="lasers"/> 
    <valueinElement attributeValue="frogs"/> 
</root> 

,得到了在這兩種情況下的輸出如下:

dogs,cats,mice,lasers,frogs 
+0

很大,U救了我小時! – chugh97 2009-06-18 13:16:33

3

只要使用這種替代,這將糾正你的輸出。

<xsl:value-of select="substring($myConcatString,1,$valueLength)"/> 

<xsl:value-of select="substring($myConcatString,0,$valueLength)"/>