XSLT:如果条件满足,如何退出“for-each”循环

时间:2012-05-01 01:47:03

标签: xslt foreach

如果条件满足,如何在XSL中退出“for-each”循环? 例如假设我希望XSL在以下XML中显示具有(2间卧室并且租用< = 1000)的公寓的地址,以下XSL代码:

<xsl:for-each select="//apartment/apartment_details">
  <xsl:if test="bedrooms=$bedrooms and rent &lt;= $budget "> 
    <!--display apartment address--> 
  </xsl:if>
</xsl:for-each>

会两次返回同一个公寓地址。我想只显示公寓地址一次,即使满足条件的公寓有多个。

XML结构:

<apartments>
  <apartment>
    <address>
        <street>....</street>
        <city>....</city>
    </address>
    <apartment_details>
        <bedrooms>2</bedrooms>
        <bathrooms>2</bathrooms>
        <rent>1000</rent>
    </apartment_details>
    <apartment_details>
        <bedrooms>2</bedrooms>
        <bathrooms>1</bathrooms>
        <rent>900</rent>
    </apartment_details>
    ...
  </apartment>
  ...
</apartments>

谢谢。

2 个答案:

答案 0 :(得分:4)

  

如果条件满足,如何在XSL中退出“for-each”循环?

这是不可能的。没有任何XSLT指令可以退出xsl:for-each的处理并继续执行转换。您可以做的是精确指定所选节点应满足的条件

使用

<xsl:for-each select=
 "/*/apartment
      [apartment_details[bedrooms=$bedrooms and $budget  >= rent]]">
  <!-- output apartment address here -->  
</xsl:for-each>

此代码显示任何apartment的地址,该地址是XML文档顶部元素的子项,并且具有apartment_details子项,其子项为bedrooms和{{1 } rent

true()

答案 1 :(得分:0)

我认为您不需要使用循环,而是尝试使用过滤器表达式:

<xsl:value-of select="NODE[CRITERIA][1]">