У меня есть XML-документ местоположений магазина, в котором есть узел Типа, указывающий тип хранилища, и существующий набор шаблонов для добавления ключа в каждое Местоположение на основе его состояния, который затем добавляет их в HTML в порядке их состояния. .
Что мне нужно сделать, так это исключить из отображения все состояния, которые не имеют тип 1. В цикле for-each достаточно просто пропустить отображение этих местоположений, но я получаю отображение состояний, которые не имеют значения в них.
Вот код внутри тега <select/>
HTML:
<xsl:apply-templates select="$locations/descendant::Locations" mode="locations.list"/>
Этот шаблон выглядит так:
<xsl:template match="Locations" mode="locations.list">
<xsl:apply-templates select="Location[generate-id(.) = generate-id(key('state', State)[1])]" mode="locations.list.location"/>
</xsl:template>
Шаблон, который он вызывает, выглядит следующим образом:
<xsl:template match="Location" mode="locations.list.location">
<option value="state"><xsl:value-of select="normalize-space(State)"/></option>
<xsl:for-each select="key('state', State)">
<option value="{normalize-space(SiteKey)}"><xsl:value-of select="normalize-space(Location)/></option>
</xsl:for-each>
<option value=""/>
</xsl:template>
Обычно в <xsl:apply-templates select="Location[generate-id(.) = generate-id(key('state', State)[1])]" mode="locations.list.location"/>
я бы просто указал в выборке, что меня интересовали только местоположения, имеющие тип '1', но я не могу найти способ вставить это условие вместе с ключом код генерации.