Я пишу шаблон, который «расширяет» шаблоны, но у него есть некоторые проблемы.
<xsl:template match="*[@condition]" mode="#all">
<xsl:element name="condition">
<xsl:attribute name="name">
<xsl:value-of select="@condition"></xsl:value-of>
</xsl:attribute>
<xsl:apply-imports>
</xsl:apply-imports>
</xsl:element>
Проблема в том, что в шаблонах, вызываемых с использованием <xsl:apply-imports>
, отсутствуют параметры.
Список параметров неизвестен, так как существует множество различных шаблонов, которые этот шаблон пытается расширить (отсюда mode="#all"
).
Есть ли хороший способ обойти это?
Дополнительный пример:
Рассмотрим два последних шаблона (только для чтения):
<xsl:template match="*" mode="mode1">
<param name="p1"/>
</xsl:template>
<xsl:template match="*" mode="mode2">
<param name="p2"/>
</xsl:template>
они называются где-то (только для чтения):
<xsl:apply-templates mode="mode1">
<xsl:with-param name="mode1" select="$mode1"/>
</xsl:apply-templates>
<xsl:apply-templates mode="mode2">
<xsl:with-param name="mode2" select="$mode2"/>
</xsl:apply-templates>
Может быть 100 с mode1, mode2, mode3, mode4 ... и имена не имеют шаблона.
Я хотел бы иметь глобальный шаблон, который оборачивает дополнительную информацию вокруг окончательных шаблонов. Что-то вроде:
<xsl:template match="*" mode="#all">
<xsl:next-match/>
</xsl:element>
Проблема в том, что указанный выше глобальный шаблон не передает параметры в шаблоны.