maxru
МИФИст
xsl:apply-templates делает output-escaping. Как исправить.
Ситуация такова:
Есть база по маркам товара. Я забираю xml по товарам (генерирую сам) и запихиваю в xsl-шаблонизатор.
Вот XML:
Вот фрагмент XSL-шаблона, выводящий список марок:
В итоге получается, что при вызове xsl:apply-templates возвращаемое темплейтом значение все равно экранируется.
То есть & превращается в & (если генерировать список не в отдельном темплейте, а в /goods циклом, то остается & как и было).
Это некритично (в списке марок вместо & стоит &, но выглядит некрасиво.
Как отменить экранирование (или убрать его последствия)?
Ситуация такова:
Есть база по маркам товара. Я забираю xml по товарам (генерирую сам) и запихиваю в xsl-шаблонизатор.
Вот XML:
PHP:
<goods>
<items_on_page>10</items_on_page>
<pages_total>1</pages_total>
<current_page_number>1</current_page_number>
<items_sort_by>good_id</items_sort_by>
<items_sort_direction>ASC</items_sort_direction>
<filters>
</filters>
<good id = "11">
<marking>34234234-23</marking>
<brand>7</brand>
<model>FDE-2</model>
<type>3</type>
<price>135.67</price>
</good>
<parameters>
<brands>
<brand id = "7">
<name>Black &amp; Decker</name>
</brand>
<brand id = "8">
<name>B&amp;S</name>
</brand>
<types>
<type id = "1">
<name>Автомойка</name>
</type>
<type id = "2">
<name>Автопылесос</name>
</type>
</types>
</parameters>
</goods>
PHP:
<xsl:template match="/goods">
<xsl:apply-templates select="parameters/brands">
<xsl:with-param name="sel" select="./filters/good_brand"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="parameters/brands">
<select name="filter_brand" id="filter_brand" class="text" onchange="loadGoods()">
<option value="0">Все</option>
<xsl:apply-templates select="brand">
<xsl:with-param name="sel" select="$sel"/>
</xsl:apply-templates>
</select>
</xsl:template>
<xsl:template match="brand">
<xsl:choose>
<xsl:when test="$sel = @id">
<option value="{@id}" selected="selected" style="background-color: red;"><xsl:value-of disable-output-escaping = "yes" select="name"/></option>
</xsl:when>
<xsl:otherwise>
<option value="{@id}"><xsl:value-of disable-output-escaping = "yes" select="name"/></option>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
То есть & превращается в &amp; (если генерировать список не в отдельном темплейте, а в /goods циклом, то остается & как и было).
Это некритично (в списке марок вместо & стоит &, но выглядит некрасиво.
Как отменить экранирование (или убрать его последствия)?