2010-12-13 77 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