我有一个Sharepoint列表,其中一列是一个返回多个值的查阅列,用分号分隔。我想在输出中将这些项目显示为单独的行,而不是与分隔符一起显示为单行。相关字段的xsl如下:
<xsl:template match="FieldRef[(@Encoded) and @Name='Project_x0020_Tasks']" ddwrt:dvt_mode="body" mode="Lookup_body" ddwrt:ghost="show">
<xsl:param name="thisNode" select="."/>
<xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes" />
</xsl:template>
目前,视图将表格单元格中的数据显示为:
Task 1; Task 2; Task 3;
我希望它显示为
Task 1
Task 2
Task 3
我花了很长时间在网上搜索,但到目前为止还没有找到任何帮助我的解决方案。
答案 0 :(得分:0)
你可以做的是有一个递归模板,将分号转换为<br />
标签,如下所示:
<xsl:template name="CharToLineBreak">
<xsl:param name="text" />
<xsl:param name="char" />
<xsl:choose>
<xsl:when test="contains($text, $char)">
<xsl:value-of select="substring-before($text, $char)" />
<br />
<xsl:call-template name="CharToLineBreak">
<xsl:with-param name="text" select="substring-after($text, $char)" />
<xsl:with-param name="char" select="$char" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
然后,不要像你的问题中所示那样xsl:value-of
,而是xsl:call-template
这样做......
<xsl:call-template name="CharToLineBreak">
<xsl:with-param name="text" select="$thisNode/@*[name()=current()/@Name]" />
<xsl:with-param name="char" select="';'" />
</xsl:call-template>
我不确定为什么你在获取属性值时会有如此多的复杂性。它可以简化为这个
<xsl:call-template name="CharToLineBreak">
<xsl:with-param name="text" select="@Project_x0020_Tasks" />
<xsl:with-param name="char" select="';'" />
</xsl:call-template>