3

条件が満たされた場合、XSLの「for-each」ループを終了するにはどうすればよいですか?たとえば、XSLに、次のXMLで次のXSLコード(2ベッドルームおよび家賃<= 1000)を持つアパートのアドレスを表示させたいとします。

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

同じアパートの住所を2回返します。条件を満たすマンションが複数ある場合でも、マンションの住所を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>

ありがとうございました。

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アドレスbedroomsを表示します。renttrue()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 に答える