我需要找到美国邮政编码在某个数字范围(130-160)之间的元素。
是否有一种更简单的方法可以在邮政编码的字符串值上编码此逻辑,而不是执行32“start-with(PostalCode,'103')”或.........:
<xsl:when test="starts-with(//Order/Address/PostalCode,'130')or starts-with(//Order/Address/PostalCode,'131')or starts-with(//Order/Address/PostalCode,'132')or starts-with(//Order/Address/PostalCode,'133')or starts-with(//Order/Address/PostalCode,'134')or starts-with(//Order/Address/PostalCode,'135')or starts-with(//Order/Address/PostalCode,'136')or starts-with(//Order/Address/PostalCode,'137')">
已经有&gt;超过300 xsl:选择:何时和:否则在这个怪物中划线,我写的没有一行评论。这种方式似乎错了。
答案 0 :(得分:0)
好吧,如果你只是要查看前三位数,你可以先设置一个变量来保存前三位数
<xsl:variable name="zip" select="number(substring(//Order/Address/PostalCode, 1, 3))" />
然后检查范围变得简单
<xsl:choose>
<xsl:when test="$zip >= 130 and $zip <= 160">Hurrah!</xsl:when>
为了更灵活一点,你可以参数化......
<xsl:param name="first" select="130" />
<xsl:param name="last" select="160" />
然后你会使用这些参数:
<xsl:variable name="zip" select="number(substring(//Order/Address/PostalCode, 1, string-length($first)))" />
<xsl:choose>
<xsl:when test="$zip >= $first and $zip <= $last">
答案 1 :(得分:0)
您可以测试:
<xsl:variable name="subcode" select="substring(PostalCode, 1, 3)" />
<xsl:if test="130 <= $subcode and $subcode <= 160">
<!-- result if true -->
</xsl:if>
但是,如果要查找满足此条件的元素,则应在谓词中使用它。