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

时间:2017-06-22 22:01:49

标签: html xslt

我试图过滤掉低于$ 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中添加条件?

1 个答案:

答案 0 :(得分:0)

据我所知,您只想处理8号单元格的行 包含的价值不到一百万。

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

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

如果您的XSLT脚本还包含身份模板,则必须 某种程度上&#34;阻止&#34;来自proessing的其他行。你可以用一个 &#34;更通用的&#34;,模板,所有行:

<xsl:template match="row"/>

实际上,它将适用于所有&#34;其他&#34;行(前者 模板不适用。)

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

更改&#34;外部&#34;循环到:

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