2010-12-13 105 views
2

我正在使用啓用了「多選」選項的「選擇」網站列,以便用戶可以使用列中的多個選項來標記列表項。Sharepoint XSL - 將字符串拆分爲組成部分

此列隨後爲內容查詢web部件中的設計功能提供支持 - 在此處添加列選項以創建圖像文件名。

  • 選擇1
  • 選擇2
  • Choice3
  • Choice4

成爲

<img src="http://mysite/content-Choice1.jpg /> 

我有問題是,XSL解析器被送到具有串分號(;)和散列(#)分隔選項值。如果所有的4個選項中打勾,送入XSLT分析器,字符串將是:

;#Choice1;#Choice2;#Choice3;#Choice4 

我怎樣才能通過串並工作,每一個選擇單獨部署到自己的XSL變量?

我已經嘗試了各種子字符串函數之前,但我不能得到任何工作。

+0

一般'xslt'問題應該有輸入源,期望的輸出和關係。這個問題是針對特定的XSLT框架的。作爲一般的XSLT問題,答案是沒有辦法'我如何處理字符串並將每個選項分離到它自己的XSL變量中?'。您可以爲每個「Choice」字符串構建一個臨時結果樹(帶有用於XSLT 1.0的擴展函數)。在XSLT中查看有關令牌化的問題。 – 2010-12-13 18:42:51

回答

2

我會推薦使用JavaScript解析字符串,並相應地使用JavaScript顯示圖像。

+1

Hiya - XSL在碰到頁面之前在MOSS中被解析,所以我更喜歡服務器端的XSLT解決方案在頁面上進行後期處理。 – MrFidge 2010-12-14 10:17:04

+0

然後用frederic回覆:) – 2010-12-14 10:22:53

+0

你可以在[XSL中嵌入JavaScript](http://www.w3.org/TR/xslt11/#ecmascript-binding) – rds 2010-12-15 13:25:47

2

由於XPath 1.0不支持tokenize()函數,因此您必須自己完成所有工作。例如,可以從以下選項中遞歸地生成<img>元素:

<xsl:template name="RecurseConvertChoicesToImages"> 
    <xsl:param name="choices" /> 

    <xsl:variable name="token" 
     select="substring-before($choices, ';#')" /> 
    <xsl:variable name="nextToken" 
     select="substring-after($choices, ';#')" /> 

    <xsl:if test="$token"> 
     <img src="http://mysite/content-{$token}.jpg" /> 
    </xsl:if> 
    <xsl:if test="$nextToken"> 
     <xsl:call-template name="RecurseConvertChoicesToImages"> 
      <xsl:with-param name="choices" select="$nextToken" /> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
+0

喜歡你的回答 – 2010-12-14 10:23:09

+0

@Ashutosh Singh,if你喜歡答案,點擊「這個答案很有用」向上箭頭。 – rds 2010-12-15 13:24:05