XSLT在调用模板中传递当前上下文

XSLT在调用模板中传递当前上下文,xslt,Xslt,在XSLT1.0中,将当前上下文节点传递给被调用模板并使该节点成为被调用模板内的上下文节点的最短/最干净/推荐的方法是什么 如果一个没有xsl:param且由空调用模板调用的模板能够简单地拾取调用方的上下文节点,那就太好了(是吗?),但我能想到的最好方法是: <xsl:call-template name="sub"> <xsl:with-param name="context" select="." /> </xsl:call-t

在XSLT1.0中,将当前上下文节点传递给被调用模板并使该节点成为被调用模板内的上下文节点的最短/最干净/推荐的方法是什么

如果一个没有xsl:param且由空调用模板调用的模板能够简单地拾取调用方的上下文节点,那就太好了(是吗?),但我能想到的最好方法是:

    <xsl:call-template name="sub">
        <xsl:with-param name="context" select="." /> 
    </xsl:call-template>


如果模板没有
xsl:param
而由一个空的
调用模板调用的
只会拾取 调用方的上下文节点

这正是W3C XSLT 1.0(和2.0)规范中定义的
xsl:call-template
,并由任何兼容的XSLT处理器实现

下面是一个小例子:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="a">
  <xsl:call-template name="currentName"/>
 </xsl:template>

 <xsl:template name="currentName">
  Name: <xsl:value-of select="name(.)"/>
 </xsl:template>
</xsl:stylesheet>

只是用另一种方式来解释迪米特里说的话

从节点调用模板时,您已经在该节点中

例如:

假设此代码:

<xsl:template match="MyElement">
    <xsl:call-template name="XYZ"/>
</xsl:template>

<xsl:template name="XYZ>
    <xsl:value-of select="."/>
</xsl>


谢谢你,迪米特。我没有看到这个文档,而且在我尝试它时,它似乎不起作用。我看的地方不对,一定是做错了什么+回答1个问题。干杯。@JPM:不客气。您可能已经看过XSLT2.0中的
xsl:function
指令——它不同于命名模板,因为它不接收函数调用方的上下文,如果调用方必须将其上下文节点作为参数传递,则必须传递此上下文节点。
<t>
 <a/>
</t>
  Name: a
<xsl:template match="MyElement">
    <xsl:call-template name="XYZ"/>
</xsl:template>

<xsl:template name="XYZ>
    <xsl:value-of select="."/>
</xsl>
<xsl:template match="MyElement">
    <xsl:value-of select="."/>
</xsl:template>