После просмотра записи с последнего вэбинара попробовал использовать такой вот вариант, где
подпись: "Ближайшая ст. Метро:" по идее должна перестать быть статичной
<xsl:template match="property[@name='nearest_metro_station_spb']" mode="metro_station_list">
<xsl:choose>
<xsl:when test=".//property[@name = 'nearest_metro_station_spb']/value/item">
Метро: <span><xsl:value-of select="@name" /><xsl:text>, </xsl:text></span>
</xsl:when>
<xsl:when test="item[position(.//property[@name = 'nearest_metro_station_spb']/value/item) = last()]">
<span><xsl:value-of select="@name" /><xsl:text>.</xsl:text></span>
</xsl:when>
<xsl:otherwise>
<xsl:text>Ближайшая ст. Метро: </xsl:text> <span><xsl:text>далее, чем 5 км.</xsl:text> </span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Но не сработало.... названия станций не выводятся с этим вариантом.
если вы пишите шаблон с таким match
<xsl:template match="property[@name='nearest_metro_station_spb']" mode="metro_station_list">
то внутри этого шаблона вы работает от этого match, то есть от property и для получения доступа к узлу
value вам надо писать не
.//property[@name = 'nearest_metro_station_spb']/value , а просто
value Если знать основы с чем вы работает в шаблоне с учетом того что прописанно в match этого шаблона и представлять xml c которым вы работаете, а он выглядит примерно так:
<property id="435" name="nearest_metro_station_spb" type="relation" multiple="multiple">
<title>Ближайшее метро</title>
<value>
<item id="111" name="Аэропорт" type-id="12" ownerId="44" xlink:href="uobject://111"/>
<item id="112" name="Полежаевская, Сокол" type-id="12" ownerId="44" xlink:href="uobject://112"/>
</value>
</property>
, то я теряюсь в попытке еще как то по другому объяснить это.
По поводу предыдущей задачи, все точно также, вы прописываете "Ближайшая станция:" не в том шаблоне, почему и получаете результат "Ближайшая ст. Метро: Аэропорт, Ближайшая ст. Метро: Полежаевская, Сокол."
Привожу шаблоны с комментариями.
<xsl:template match="udata" mode="hotel-object-view">
<!--
тут мы выбираем все item, то есть получаем такой xml
<item id="111" name="Аэропорт" type-id="12" ownerId="44" xlink:href="uobject://111"/>
<item id="112" name="Полежаевская, Сокол" type-id="12" ownerId="44" xlink:href="uobject://112"/>
и именно пере проработкой всех item и надо выводить строчку "Ближайшее метро:"
-->
<xsl:apply-templates select=".//property[@name = 'nearest_metro_station_spb']/value/item" mode="metro_station_list" />
</xsl:template>
<xsl:template match="item" mode="metro_station_list">
<xsl:value-of select="@name" /><xsl:text>, </xsl:text>
<!--тут мы обрабатываем все item кроме последнего и если сюда приписать слово "Ближайшее метро:", то мы получим его около кадого пункта кроме последнего, так как последний item обрабатывается шаблоном ниже
-->
</xsl:template>
<xsl:template match="item[position() = last()]" mode="metro_station_list">
<xsl:value-of select="@name" /><xsl:text>.</xsl:text>
</xsl:template>
P.S. и до тех пор пока вы не проясните для себя вопрос как работать с <xsl:apply-templates> и <xsl:template> или не объясните мне, что именно вам мешает с ними разобраться (из объективных причин, которые можно объяснить и помочь вам) я приостановлю свои комментарии на ваши задачи касательно проблем с использованием данных конструкций.