シリアル化用のデータ注釈付きのオブジェクトがあります。これは、true(デバッガーでテスト済み)のブールプロパティを持っているため、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
€ <xsl:value-of select="format-number(@disvalue, '#.###,00', 'euro')" />
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
常にエピックフェイルが表示されるため、テストは常に失敗します。私も試しました:
- @ isperc ='true'
- @ isperc = 1
- boolean(@isperc)
- @isperc = true()
さらにいくつかの背景情報:これは、組み込みのデータ注釈を使用してシリアル化するasp.netオブジェクトです。.NetでのXSLTサポートは1.0のみです。
私の作品を編集するcoupon.cs
[XmlAttribute("isperc")]
public bool IsPerc
{
get { return _isPerc; }
}
null許容型ではありませんが、2番目のコメント投稿者が指摘したように、<xsl:value-of select="@isperc"/>
wellの値は何であるか、空のようです。htmlでは何も解析されません。true
ブール値が...であるため、空白やnullなどではありません。
edit2これも何も出力しない<xsl:value-of select="string(@isperc)"/>
ので、これも失敗します<xsl:when test="string(@isperc) = 'true'">