0

シリアル化用のデータ注釈付きのオブジェクトがあります。これは、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
                    &#8364; <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'">

4

1 に答える 1

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

C# ブール型と一致する必要があります。

私が見た回避策は、ブール値を数値に変換することです。

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