2013-05-07 50 views
1

我有從SharePoint來作爲<xsl:value-of select="@fldNm" />有條件地顯示1 2個char.s基於的xsl:value-of的

的值這將具有的2個可能值1: '是' 爲空字符串,或這是在SharePoint顯示錶單的<xsl:template name="dvt_1.rowedit">之內。

如果該值爲空字符串,我想丟棄一個字符,但如果它是'是',我想顯示一個不同的字符。

我把一個標籤與HTML內聯,並使用document.write()。但我沒有運氣讓行動迴應fldNm的價值。

我發現了很多例子,但它們與我試圖做的不同,我無法理解它們。

情況是這樣的:

當您創建一個SharePoint自定義列表,3 .aspx頁爲您製作:newForm,editForm和dispForm。

這些.aspx頁面加載了各種xsl和xslt功能。創建了幾個xsl模板,其中一個保存了使用.aspx時顯示的HTML。該模板由SharePoint命名爲「dvt_1」。然後該模板在<xsl:for-each select="$Rows"> xsl結構中調用。

內dispForm頁面上的所謂的模板,每個數據是通過使用

<td> 
     <div> 
      <xsl:value-of select="@fieldName" /> 
     </div> 
    </td> 

當呈現頁面顯示,即「價值的」標籤替換爲任何的領域是內容褻瀆(當然)。

在我的情況下,由於設計要求文檔,我詢問的字段將包含'是'或''。

如果是的話,我想用一個字符表示'是'。否則,我想把不同的字符放在那裏,表示'不是'。

我無法弄清楚如何將渲染值轉化爲選擇構造。

我想是這樣

<td> 
    The answer is: <script> if (<xsl:value-of select="@fieldName" /> == 'yes') { 
    document.write('A'); 
    } else { 
    document.write('B'); 
    } 
    </script> 
    </td> 

但XSL標籤不承認。

我對xsl非常陌生,儘管我已經開始看到語法是如何實現的,但它對我來說仍然很神祕。

+1

這是不夠的背景下理解這個問題,並沒有真正意義。值不是「來自SharePoint」的XSL標籤,它們(可能)位於您正在使用XSL轉換的XML文檔中。顯示XML文檔和相應的XSL樣式表的相關部分。 – 2013-05-07 22:44:57

+0

轉移到主要問題... – 2013-05-08 14:42:49

回答

1

既然你沒有提供給我們很多信息,這是我可以給的最好的答案。

this answer所示:

更一般的XPath 1。0表達式生成字符串$ S1如果 $ val爲「X」,併產生字符串$ S2如果$ val爲「Y」:

concat(substring($s1, 1 div ($val = "x")), 
     substring($s2, 1 div ($val = "y")) 
    ) 

如果我正確理解你的問題,這個原則可以用於生成預期的答案。看到這一點,看看下面的例子:

假設:

  • "yes"值應該輸出的字符"a"
  • ""應該輸出的字符"b"

當這個XSLT(使用前述的XPath)時:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output omit-xml-declaration="yes" indent="yes" method="text"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="e"> 
    <xsl:text>The value is: </xsl:text> 
    <xsl:value-of 
     select="concat(substring('a', 1 div (@fldNm = 'yes')), 
        substring('b', 1 div (@fldNm = '')) 
      )"/> 
    <xsl:text/> 
    </xsl:template> 

</xsl:stylesheet> 

......被應用於以下示例XML:

<t> 
    <e fldNm="yes"/> 
    <e fldNm=""/> 
</t> 

......想要的結果產生:

The value is: a 
The value is: b 
0

使用

substring('yx', 1 + (@fldNm = 'yes'), 1) 

如果名爲「fldNm」的屬性(上下文節點的屬性)的值爲「是」,則此表達式的評估將生成字符「x」,否則評估將生成字符「y」。

這裏我們使用的事實,顧名思義

number(true()) = 1 

number(false()) = 0 
+0

這是一個相當不錯的答案,並且很好簡潔。但ABach的答案似乎更具可測性,而且是我用過的。 – 2013-05-08 17:31:00

+0

@BrianWren,是的,ABach從我的一個答案(他引用)中學到了這個更一般的技巧。但是,我建議只有在不可能採用更專業和高效的解決方案時才使用這種更通用的技術。 *在這種情況下*兩個子串的連接,其中一個參數是一個被零除的串,實際上是過度延伸,對於普通的XSLT程序員來說,效率低得多,複雜且難以理解。 – 2013-05-08 18:04:20