Sibirskiy писал(а):
пробовал, если же я выношу за пределы:
<ul id="portfolio-list" class="gallery three-cols">
<xsl:template match="blocks/items/item">
<li class="pink">
<xsl:if test="item_small_image!=''">
<a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
</xsl:if>
</li>
</xsl:template>
</ul>
Потому что так нельзя. Вы нарушаете структуру XSL-файла.
Смотрите: в общем случае, XSL-файл состоит из заголовка (там несколько служебных строк) и набора темплейтов xsl:template. Кроме самих темплейтов, непосредственно внутри тега xsl:stylesheet после заголовков ничего другого быть не может (ну то есть на самом деле еще могут быть объявления глобальных переменных, но об этом не сейчас). Темплейты вызывают друг-друга по цепочке, с помощью команды xsl:apply-templates
И чтобы создать нужные вам теги ul вокруг набора тегов li, вам нужно прописать эти ul в том темплейте, который из себя вызывает другой темплетей, строящий нужные вам теги li, и прописать их именно вокруг этого вызова.
А вы, вместо того чтобы окружить тегами ul _вызов_ темплейта, попытались окружить ими сам темплейт, строящий список li, и естественно нарушили всю структуру XSL-документа.
Ниже я накидал немного абстрактный и очень упрощенный примерчик того, как надо делать. Он больше для наглядности, чем для реального использования.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="document/blocks"/>
</xsl:template>
<xsl:template match="document/blocks">
<h2>
<xsl:value-of select="name"/>
</h2>
<ul>
<xsl:apply-templates select="items/item"/>
</ul>
</xsl:template>
<xsl:template match="items/item">
<li class="pink">
<xsl:if test="item_small_image!=''">
<a href="{item_image}" rel="group1" class="fancybox" title="{item_description}"><img src="{item_small_image}" /></a>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>