0

我有一个带有用于序列化的数据注释的对象。它有一个布尔属性,它是真的(用调试器测试),所以 100% 确定,但是当我在 xslt 中有这个时:

<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 = true()

更多背景信息:它是一个 asp.net 对象,我使用内置数据注释对其进行序列化。.Net 中的 XSLT 支持仅为 1.0。

编辑我的一段coupon.cs

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

它不可为空,但正如第二位评论者指出的那样,<xsl:value-of select="@isperc"/>well 的价值是什么,它似乎是空的。它在 html 中解析为空。不是空格,不是 null 等等,这很奇怪,因为布尔值是true......

edit2这也没有输出任何东西<xsl:value-of select="string(@isperc)"/>,所以这也失败了<xsl:when test="string(@isperc) = 'true'">

4

1 回答 1

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

应该匹配 C# 布尔类型。

不过,我见过的一种解决方法是将布尔值转换为数字;

<xsl:when test="number(@IsPerc) > 0">
于 2012-10-19T13:07:12.363 回答