3

如果满足条件,如何退出 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>

谢谢你。

4

2 回答 2

4

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

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

使用

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

此代码显示任何apartment作为 XML 文档顶部元素的子元素且具有apartment_details子元素的地址,对于谁的子元素bedroomsrent它是true()bedrooms=$bedrooms and $budget >= rent

于 2012-05-01T02:16:16.077 回答
0

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

<xsl:value-of select="NODE[CRITERIA][1]">
于 2012-05-01T02:02:46.720 回答