Решение, может кому пригодиться:
<xsl:template match="/shop">
<xsl:if test="count(shop_item) > 0 or /shop/filter = 1">
<div class="row">
<!-- Выводим производителей -->
<ul class="producers">
<xsl:apply-templates select="producers/shop_producer" mode="items"/>
</ul>
<!-- Выводим товары без производителей -->
<xsl:apply-templates select="shop_item[shop_producer_id = 0]" />
</div>
</xsl:if>
</xsl:template>
<!-- Шаблон для производителей -->
<xsl:template match="producers/shop_producer" mode="items">
<li>
<xsl:variable name="producer" select="@id" />
<div class="producer-name"><xsl:value-of select="name"/></div>
<!-- Выводим товары магазина -->
<ul class="list-product">
<xsl:apply-templates select="/shop/shop_item[shop_producer_id = $producer]" />
</ul>
</li>
</xsl:template>
<!-- Шаблон для товара -->
<xsl:template match="shop_item">
<li>
<a href="{url}" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</li>
</xsl:template>