Вот полный код, о котором вы спрашивали. Я оказался автором, поэтому позвольте мне объяснить:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
Следующий шаблон переопределяет встроенный шаблон XSLT для узлов элементов.
Он соответствует каждому 6k + 1-му gallery
элементу. Он создает элемент tr
и внутри его тела помещает результаты обработки этого элемента gallery
вместе со следующими 5. Обработка выполняется в специальном режиме ("proc"), чтобы отличить его от стандартного анонимного режима, в котором встроенные шаблоны XSLT запущены и продолжают работать.
<xsl:template match="gallery[position() mod 6 = 1]">
<tr>
<xsl:apply-templates mode="proc"
select=".|following-sibling::gallery[not(position() > 5)]"
/>
</tr>
</xsl:template>
Следующий шаблон вызывается в режиме «proc» для обработки каждого gallery
элемента в группе из 6, которые должны находиться в одной строке.
<xsl:template match="gallery" mode="proc">
<td>
<img src="{gallery-image-location}" alt="{gallery-image-alt}"/>
</td>
</xsl:template>
Следующий шаблон переопределяет обработку по умолчанию встроенных шаблонов XSLT для всех элементов gallery
, положение которых не относится к типу 6k + 1 (они не запускают новый 6-кортеж). В нем просто сказано ничего не делать с такими элементами, потому что эти элементы уже обрабатываются в режиме «proc».
<xsl:template match="gallery[not(position() mod 6 = 1)]"/>
</xsl:stylesheet>
Вам необходимо ознакомиться с моделью обработки XSLT, обработкой по умолчанию и встроенными шаблонами.