【问题标题】:when to use xsl:if and when to use xsl:choose/xsl:when in XSLT在 XSLT 中何时使用 xsl:if 以及何时使用 xsl:choose/xsl:when
【发布时间】:2013-09-11 13:45:00
【问题描述】:

我知道这似乎是一个愚蠢/新手的问题,但我对 XSLT 还很陌生(尽管我开始接触它并了解它的功能)。

什么时候适合使用xsl:if,什么时候适合使用xsl:choose/xsl:when

当我想要一个“其他”选项时,我一直在使用选择/何时/否则。它是否正确?

例如,我有一些地方正在做:

<xsl:choose>
  <xsl:when test="count(entry) != 0">
    put positive outcome here
  </xsl:when>
  <xsl:otherwise>
    put something else here
  </xsl:otherwise>
</xsl:choose>

xsl:if 会更好吗?

感谢您的意见。

【问题讨论】:

  • 您还熟悉哪些其他语言?
  • @Damien_The_Unbeliever 我有 .net 背景,主要是在 vb 中,虽然我可以做 c# 以及 html、javascript、php、perl(从前一天)和冷融合

标签: xslt


【解决方案1】:

在您只想测试表达式是否为真的简单情况下使用xsl:if。 (注意没有对应的xsl:else。)

<xsl:if test="expression">
    output if the expression is true
</xsl:if>

当表达式为 false 时,如果您有一些备用输出,请使用 xsl:choose

<xsl:choose>
    <xsl:when test="expression">
        output if the expression is true
    </xsl:when>
    <xsl:otherwise>
        output if the expression is false
    </xsl:otherwise>
</xsl:choose>

【讨论】:

    【解决方案2】:

    xsl:if 会更好吗?

    并非如此 - 除非您想拥有两个 xsl:ifs 并确保它们的条件是互斥的。

    xsl:choose 将始终准确地选择一个可用的xsl:whenxsl:otherwise

    &lt;xsl:choose&gt; 元素的 &lt;xsl:when&gt; 子元素按从上到下的顺序进行测试,直到其中一个元素的测试属性准确描述源数据中的条件,或者直到达到 &lt;xsl:otherwise&gt; 元素.一旦选择了&lt;xsl:when&gt;&lt;xsl:otherwise&gt; 元素,就会退出&lt;xsl:choose&gt; 块。不需要显式的 break 或 exit 语句。

    它与受 C 语言启发的语言(C、C++、Java、C#)中的 switch 语句或 Visual Basic 中的 Select...Case 非常相似

    xsl:if 没有与此类语言相同的 else 子句,所以我只推荐你是否想做“某事”(即在非情况下,你不'不想指定替代)

    【讨论】:

    • 我认为“确保它们的条件是互斥的”似乎与您的意思相反。 choose 元素的 when 子句是互斥的。两个不同的if 元素都可以评估为真,因此不是互斥的。还是我误会了?
    • @senderle - 是的,我想说的是,你只能替换 xsl:ifs 你目前正在使用xsl:choose if i> 你愿意确保条件是互斥的。如果您不这样做,那么正如我们所说,多个ifs 可能匹配,因此基于xsl:if 的版本和xsl:choose 版本具有不同的语义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2014-01-16
    • 2015-09-06
    相关资源
    最近更新 更多