如何缩短 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'
]">
我有这个 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'
]">