我有一个包含序列化数据注释的对象。它有这么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
€ <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'">
你能举例说明你正在尝试处理的输入XML吗? –
您是否消除了个案问题?请参阅http://stackoverflow.com/questions/8940695/how-to-check-for-string-equality-case-insensitive-in-xsl。什么' 'return? –
dash
您*必须*提供源XML文档(请尽可能小)和完整的XSLT转换 - 不仅是一个片段。然后任何人都可以重现这个问题,这里的许多人可以提供一个很好的解决方案。因此,在调试器中,获取序列化结果并将此XML文档放置在问题中。看起来,这是一个C#序列化问题,而不是XSLT问题。 –