В XSLT 2.0 я мог бы сделать что-то вроде
это связать "." в этом шаблоне
произвольная переменная:
<xsl:template match="dummyNode">
<xsl:variable name="inputString">foobar</xsl:variable>
<xsl:variable name="result" select="$inputString">
<xsl:call-template name="foreignTemplate" />
</xsl:variable>
</xsl:template>
Это не так .
Как в XSLT 1.0, так и в 2.0 * <xsl:variable>
может иметь атрибут select
или тело (конструктор последовательности), но наличие обоих одновременно является ошибкой.
Из XSLT 2.0 spec : "[ERR XTSE0620] Статическая ошибка, если элемент привязки переменной имеет атрибут select и имеет непустое содержимое".
Я бы порекомендовал следующий стиль письма:
В XSLT 1.0 : не полагаться на узел контекста в качестве неявного параметра. Используйте явные параметры:
<xsl:template name="foreignTemplate">
<xsl:param name="pElement" />
<xsl:value-of select="$pElement" />
</xsl:template>
и в другом шаблоне назовите это так:
<xsl:call-template name="foreignTemplate">
<xsl:with=param name="pElement" select="someExpression"/>
</xsl:call-template>
В XSLT 2.0: Используйте <xsl:function>
вместо <xsl:template>
:
<xsl:function name="my:foo" as="xs:string">
<xsl:param name="pElement" as="element()"/>
<xsl:sequence select="string($pElement)"/>
</xsl:function>
и называть это как часть любого выражения XPath:
my:foo(someElement)