2012-05-01 5 views
3

Как выйти из цикла «для каждого» в XSL, если условие выполнено? , например. Предположим, я хочу, чтобы XSL для отображения адреса квартир, которые имеют (2 спальни и аренда < = 1000), в следующем XML, следующий код XSL:XSLT: Как выйти из цикла «для каждого», если условие выполнено.

<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> 

Спасибо.

+0

«даже если в квартире есть несколько _____ для квартиры, которые удовлетворяют условию» - кажется, вам не хватает слова. – LarsH

+0

Дубликат http://stackoverflow.com/questions/470045/how-to-break-a-for-each-loop-in-xslt/8507243#8507243 –

ответ

4

Как выйти из «для-каждого» цикла в XSL, если условие выполнено ?

Это невозможно. Нет никакой инструкции 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 и rent это true() что: bedrooms=$bedrooms and $budget >= rent

0

Я не думаю, что вам нужно будет использовать цикл, вместо того, чтобы попытаться выражение фильтра:

<xsl:value-of select="NODE[CRITERIA][1]"> 
Смежные вопросы