如何缩短 XSLT select OR 条件?

How to shorten XSLT select OR conditional?

我有这个 XSL 代码:

<xsl:for-each select="$orderData[@RTSHIPOPTIONCODE='EXPEDITED']|$orderData[@RTSHIPOPTIONCODE='3DAY']|$orderData[@RTSHIPOPTIONCODE='2DAY']|$orderData[@RTSHIPOPTIONCODE='1DAY']|$orderData[@RTSHIPOPTIONCODE='FDX1DAY']|$orderData[@RTSHIPOPTIONCODE='FDX1DAYI']|$orderData[@RTSHIPOPTIONCODE='FDX2DAYI']|$orderData[@RTSHIPOPTIONCODE='FDX3DAY']">
    <script>console.log("expedited order detected ;)");</script>
</xsl:for-each>

我想知道是否有任何方法可以缩短 select 中的条件语句。我已经查看了 XSLT shorter version of OR conditional statement,但这并没有说明如何在 XSLT select.
中缩短条件 这个表达式可以缩短吗?如果是,怎么做?

感谢任何反馈!

在 XSLT 1.0 中,您可以:

<xsl:for-each select="$orderData[contains('|EXPEDITED|3DAY|2DAY|1DAY|FDX1DAY|FDX1DAYI|FDX2DAYI|FDX3DAY|', concat('|', @RTSHIPOPTIONCODE, '|'))]">

或者:

<xsl:for-each select="$orderData[@RTSHIPOPTIONCODE = document('')/*/my:allowed-values/value]">

将其置于样式表的顶层后:

<my:allowed-values>
    <value>EXPEDITED</value>
    <value>3DAY</value>
    <value>2DAY</value>
    <value>1DAY</value>
    <value>FDX1DAY</value>
    <value>FDX1DAYI</value>
    <value>FDX2DAYI</value>
    <value>FDX3DAY</value>
</my:allowed-values>

并包括:

xmlns:my="http://example.com/my"
exclude-result-prefixes="my"

xsl:stylesheet 开始标签中。

这两种方法都在您链接的线程中提到了 - 我不知道您为什么不能实现它们。如您所见,“条件语句”没有什么特别之处。


顺便说一句,这样做很简单:

<xsl:for-each select="$orderData[@RTSHIPOPTIONCODE='EXPEDITED' or @RTSHIPOPTIONCODE='3DAY' or @RTSHIPOPTIONCODE='2DAY' or @RTSHIPOPTIONCODE='1DAY' or @RTSHIPOPTIONCODE='FDX1DAY' or @RTSHIPOPTIONCODE='FDX1DAYI' or @RTSHIPOPTIONCODE='FDX2DAYI' or @RTSHIPOPTIONCODE='FDX3DAY']">

也不是一个糟糕的选择——尤其是。如果您通过缩进使其更具可读性:

<xsl:for-each select="$orderData[
    @RTSHIPOPTIONCODE='EXPEDITED' or 
    @RTSHIPOPTIONCODE='3DAY' or 
    @RTSHIPOPTIONCODE='2DAY' or 
    @RTSHIPOPTIONCODE='1DAY' or 
    @RTSHIPOPTIONCODE='FDX1DAY' or 
    @RTSHIPOPTIONCODE='FDX1DAYI' or 
    @RTSHIPOPTIONCODE='FDX2DAYI' or 
    @RTSHIPOPTIONCODE='FDX3DAY'
]">