2012-10-19 46 views
0

我有一個包含序列化數據註釋的對象。它有這麼100%肯定一個布爾值屬性,它是真實的(與調試器進行測試),但是當我有這樣的XSLT:XSLT 1.0 xsl:布爾選擇測試

<xsl:for-each select="order/Coupons/orderedCoupons" > 
    <tr> 
     <td>Discount <xsl:value-of select="@code"/></td> 
     <td> 
      <xsl:choose> 
       <xsl:when test="@isperc='true'"> 
        <xsl:value-of select="@disvalue"/>% 
       </xsl:when> 
       <xsl:otherwise>Epic fail 
        &#8364; <xsl:value-of select="format-number(@disvalue, '#.###,00', 'euro')" /> 
       </xsl:otherwise> 
      </xsl:choose> 
     </td> 
    </tr> 
</xsl:for-each> 

它始終顯示史詩失敗,因此測試總是失敗。我也試過:

  • @ isperc = '真'
  • @ isperc = 1個
  • 布爾(@isperc)
  • @isperc =真()

一些背景info:它是一個asp.net對象,我使用數據註釋進行序列化。 .Net中的XSLT支持僅爲1.0。

編輯一塊我coupon.cs

[XmlAttribute("isperc")] 
public bool IsPerc 
{ 
    get { return _isPerc; } 
} 

它不是空的,但作爲第二評註者指出,什麼是<xsl:value-of select="@isperc"/>價值很好,似乎空。它解析爲html中的任何內容。沒有一個空格,不爲空等等。這是奇怪,因爲布爾是true ...

EDIT2這也沒什麼<xsl:value-of select="string(@isperc)"/>輸出,所以這也失敗<xsl:when test="string(@isperc) = 'true'">

+2

你能舉例說明你正在嘗試處理的輸入XML嗎? –

+1

您是否消除了個案問題?請參閱http://stackoverflow.com/questions/8940695/how-to-check-for-string-equality-case-insensitive-in-xsl。什麼''return? – dash

+0

您*必須*提供源XML文檔(請儘可能小)和完整的XSLT轉換 - 不僅是一個片段。然後任何人都可以重現這個問題,這裏的許多人可以提供一個很好的解決方案。因此,在調試器中,獲取序列化結果並將此XML文檔放置在問題中。看起來,這是一個C#序列化問題,而不是XSLT問題。 –

回答

2
<xsl:when test="@IsPerc = true()"> 

應與C#的布爾類型。

我見過的解決方法是將布爾值轉換爲數字,但;

<xsl:when test="number(@IsPerc) > 0"> 
+0

我會嘗試,但'XmlAttribute'是小寫。 'code'也是小寫字母和C#屬性'Code'。但我會試一試,並會更新你a.s.a.p.感謝您的回答 –