为什么xsl:time和xsl:value-在这里没有作用?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (6)

A choose- when- testXSLT中的构造不符合我的想法。实际上,它似乎没有做任何事情。

工作日是Workday Studio。我正在改变一个已经运行了几个月的程序。这段代码中的构造与代码的其他部分非常相似,这也是令人困惑的部分原因。

<xsl:variable name="CC_Fee_Calc">
    <xsl:value-of select="number($value_from_salesforce) * number($CreditCard_RecoveryFee_Percent) * 0.01"/>
</xsl:variable>
<xsl:variable name="CC_Fee_IsZero">
    <xsl:choose>
        <xsl:when test="number($CC_Fee_Calc) &lt; 0.0">
            <xsl:value-of select="Y"/> 
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="N"/> 
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable> 

<CC_Fee_Calc><xsl:value-of select="$CC_Fee_Calc"/></CC_Fee_Calc>
<CC_Fee_Zero><xsl:value-of select="$CC_Fee_IsZero"/></CC_Fee_Zero>

请注意,<由于XSLT的XML特性,必须使用小于号的HTML版本(第6行)。代码中的其他地方也可以正常工作。

最后两行仅用于显示变量的内容。他们在日志中创建此输出(针对不同的输入数据):

<CC_Fee_Calc>150.432</CC_Fee_Calc>
<CC_Fee_Zero/>

<CC_Fee_Calc>-0.632</CC_Fee_Calc>
<CC_Fee_Zero/>

<CC_Fee_Calc>-1</CC_Fee_Calc>
<CC_Fee_Zero/>

CC_Fee_Calc字段中的值是正确的。但是CC_Fee_Zero,就好像变量只是定义了,而不是填充。我期待N为第一个例子,Y为其他两个。

提问于
用户回答回答于

更改

        <xsl:value-of select="Y"/> 

        <xsl:value-of select="'Y'"/> 

否则,您将指定一个名为(找不到)的元素Y而不是"Y"字符串。

你想要做一个类似的改变N

:在的情况下xsl:whenxsl:otherwise,你可以走得更远,只是下降xsl:value-of干脆:

    <xsl:when test="number($CC_Fee_Calc) &lt; 0.0">Y</xsl:when>
    <xsl:otherwise>N</xsl:otherwise>

信用:感谢@ michael.hor257k提出的简化建议。

用户回答回答于

代码的另一个有用的简化是替换

<xsl:variable name="CC_Fee_Calc">
    <xsl:value-of select="number($value_from_salesforce) * number($CreditCard_RecoveryFee_Percent) * 0.01"/>
</xsl:variable>

通过

<xsl:variable name="CC_Fee_Calc" 
  select="number($value_from_salesforce) * number($CreditCard_RecoveryFee_Percent) * 0.01"/>

第二个版本计算一个数字并将其绑定到变量。您的版本计算数字,将其转换为字符串,创建包含此字符串的文本节点,创建文档节点作为此文本节点的父节点,并将其绑定到变量。当你这么做的时候number($CC_Fee_Calc)它必须找到文档节点的字符串值,这意味着导航到文本节点,从文本节点提取字符串,并将其转换回数字。这样您就可以编写三行代码而不是一行代码。

扫码关注云+社区

领取腾讯云代金券