2012-05-01 4 views
3

条件が満たされた場合、XSLのfor-eachループを終了するにはどうすればよいですか?例: 二度同じアパートのアドレスを返しますXSLT:条件が満たされた場合に「for-each」ループを終了する方法

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

:私は、XSLは、以下のXMLで、次のXSLコードを持っているアパートの住所を表示する(2つのベッドルームと= 1000 <を借りる)するとします。条件を満たすアパートに複数ある場合でも、アパートの住所を1回だけ表示したい。

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

"条件を満たすアパートのために_____が複数あっても" - あなたは言葉が欠けているようです。 – LarsH

+0

重複:http://stackoverflow.com/questions/470045/how-to-break-a-for-each-loop-in-xslt/8507243#8507243 –

答えて

4

条件が満たされた場合にどのように私は、XSLで「について、それぞれ」ループを終了します?

これはできません。 xsl:for-eachの処理を終了し、変換の実行を継続するためのXSLT命令はありません。あなたができることは、選択されたノードが満たすべき条件を正確に指定することです

使用

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

このコードは、その子供bedroomsrentそれがあるために、XML文書の最上位要素の子であり、それはapartment_details子を持つ任意のapartmentのアドレスが表示されますtrue()その:bedrooms=$bedrooms and $budget >= rent

0

私の代わりにフィルタ式を試してみてください、あなたはループを使用する必要があるだろうとは思わない:

<xsl:value-of select="NODE[CRITERIA][1]"> 
関連する問題