如何格式化Sharepoint查找列XSL值

时间:2016-08-17 16:25:48

标签: xslt sharepoint

我有一个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

我花了很长时间在网上搜索,但到目前为止还没有找到任何帮助我的解决方案。

1 个答案:

答案 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>