2016-08-17 40 views
0

我有一個Sharepoint列表,其中一列是一個查找列,它返回多個值,用分號分隔。我想在輸出中將這些項目顯示爲單獨的行,而不是與分隔符一起顯示爲單行。對於所討論的場在xsl如下:如何格式化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

你可以做的是有一個分號轉換爲<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> 
+0

這種複雜性是由SharePoint自動生成的。我使用調用模板而不是調用的值嘗試了模板,但SharePoint不會顯示它。我想我將不得不使用JavaScript解決方案。 –