繁体   English   中英

如何为xsl for-each语句添加条件

[英]How to add conditions to xsl for-each statements

我想过滤掉低于$ 1,000,000的任何金额。 这是代码:

<xsl:for-each select="row">
   <tr>
      <xsl:for-each select="cell">
         <xsl:if test="position()=5">
            <td width="140" style="vertical-align: top; padding: 3px;" valign="top">
                 <xsl:choose>
                  <xsl:when test="@href">
                     <a href="">
                        <xsl:attribute name="href">
                           <xsl:value-of select="@href" />
                        </xsl:attribute>
                        <xsl:value-of select="." />
                     </a>
                  </xsl:when>
                  <xsl:otherwise>
                     <xsl:value-of select="." />
                  </xsl:otherwise>
               </xsl:choose>
            </td>
         </xsl:if>
         <xsl:if test="position()=8">
            <td class="categorydetail-last-column" style="text-align: right; vertical-align: top; padding: 3px;" align="right" valign="top">
               <xsl:value-of select="." /><!-- THIS OUTPUTS NUMBERS. WANT TO FILTER NUMBERS BELOW 1000000 -->
            </td>
         </xsl:if>
      </xsl:for-each>
   </tr>
</xsl:for-each>

它输出美元金额,但如果大于一百万则需要输出。 我尝试创建变量并将整个代码包装在IF语句中,但是没有用。 我究竟做错了什么? 我是否必须向ROW添加条件?

据我了解,您只想处理第8号单元格包含的值小于一百万的行。

因此,使用match条件仅指定此过滤条件的模板:

<xsl:template match="row[cell[8] &lt; 1000000]">
  ...
</xsl:template>

如果您的XSLT脚本还包含一个身份模板 ,则必须以某种方式“阻止”其他行进行处理。 您可以对所有行使用“更通用”的模板来执行此操作

<xsl:template match="row"/>

实际上,它将应用于所有“其他”行(以前的模板不适用)。

另一个解决方案 (更接近于您发布的脚本):

将“外部”循环更改为:

<xsl:for-each select="row[cell[8] &lt; 1000000]">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM