Оператор <xsl:if test="@class=filter">
, вероятно, не выполняет то, что вы ожидаете.
Сначала он сравнивает атрибут class
с элементом с именем filter
в вашем XML (что, вероятно, несуществовать).Возможно, вы хотели сравнить класс со строковым значением, которое вы бы сделали следующим образом:
<xsl:if test="@class='filter'">
Однако это приводит ко второй проблеме.Этот тест проверяет наличие атрибута класса в вашем входном XML (который вы не показали) для любого элемента, который вы в настоящее время сопоставляете.Он не проверяет атрибут класса, который вы только что создали в <div>
в ваших выходных данных.
Использование xsl:attribute
заменит любой существующий атрибут в элементе, который вы обрабатываете, поэтому вам не нужно помещатьclass="filter"
на <div>
.Вы можете просто сделать это ....
<div>
<xsl:attribute name="class">
<xsl:text>filter </xsl:text>
<xsl:value-of select="Category"/>
</xsl:attribute>
</div>
Еще лучше, используйте Шаблоны значений атрибутов , что позволит вам напрямую добавить атрибут class
в тег <div>
<div class="filter {Category}" />
Таким образом, «фильтр» будет выводиться в виде строки, но фигурные скобки указывают на выражение, которое будет оценено, поэтому здесь будет выведено значение элемента Category
.