如果条件满足,如何在XSL中退出“for-each”循环? 例如假设我希望XSL在以下XML中显示具有(2间卧室并且租用< = 1000)的公寓的地址,以下XSL代码:
<xsl:for-each select="//apartment/apartment_details">
<xsl:if test="bedrooms=$bedrooms and rent <= $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>
谢谢。
答案 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]">