Оптимизация (значительное ускорение) работы с большим деревом групп.
Обратите внимание, оси // являются весьма трудоемкими при обработке большого дерева, подобная проблема может возникать при множественном вызове
.//group[@id=$parent_group_id]
Например, на страницу выводится 1000 элементов, каждый из которых дважды получает текущую группу с помощью
.//group[@id=$parent_group_id]/...
Соответственно анализ дерева групп происходит 2000 раз!
Сокращаем до одного раза:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
<xsl:apply-templates select="/document"/>
</xsl:template>
<xsl:template match="/document">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="/document/this_group_id"/>
<xsl:variable name="group_node" select=".//group[@id=$parent_group_id]"/>
...
<xsl:apply-templates select="blocks/items/item[@group_id=$parent_group_id]">
<!-- Передаем уже готовый узел -->
<xsl:with-param name="group_node" select="$group_node"/>
</xsl:apply-templates>
...
</xsl:template>
<xsl:template match="blocks/items/item">
<xsl:param name="group_node" />
<!-- далее используем $group_node/... -->
...
</xsl:template>
</xsl:stylesheet>