Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 是否将模板应用于当前模板节点,而不是上下文节点?_Xslt - Fatal编程技术网

Xslt 是否将模板应用于当前模板节点,而不是上下文节点?

Xslt 是否将模板应用于当前模板节点,而不是上下文节点?,xslt,Xslt,我是XSLT新手,我不确定我在模板中创建的节点(而不是正在处理的节点)是否使用了正确的措辞。“当前模板节点”是指该块中的a: <xsl:template match="item"> <li> <a href="{location}"> <xsl:value-of select="title" /> </a> </li> </xsl:te

我是XSLT新手,我不确定我在模板中创建的节点(而不是正在处理的节点)是否使用了正确的措辞。“当前模板节点”是指该块中的
a

<xsl:template match="item">
     <li>
         <a href="{location}">
             <xsl:value-of select="title" />
         </a>
     </li>
 </xsl:template>
我的问题是:是否可以将此
a
模板应用于我在
项中创建的
a
模板,或者仅针对上下文节点进行这样的匹配?(另外,对于将来的搜索,您将这种节点称为什么?)

谢谢你的阅读

编辑:为了回应@Jim Garrison询问我的用例,上面的例子已经不远了。我必须包括的唯一额外信息是我正在使用的节点集,它看起来像:

<related-links>
    <title>Link text</title>
    <location>http://link-address.whatever</location>
</related-links>
这似乎是不必要的重复,特别是考虑到这是一个开始,我相信它会变得更加复杂。这不会是一件不寻常的事情。。。我是否应该使用其他方法

另外,我正在使用Symphony CMS,它依赖于libxslt,因此没有XSLT 2.0

可以将此模板应用于我在
模板中创建的
a

在没有扩展的XSLT1.0中,否;匹配是并且只能在输入节点上执行

在扩展名为node-set()的XSLT1.0中,是:将
a
元素或其父元素
li
元素分配给变量,从该变量构造节点集,并将模板应用于该节点集中的节点

在XSLT2.0中,是:将
a
元素或其父元素
li
元素分配给变量,将模板应用于该变量值中的节点


请注意,说“这是可能的”与说“这是个好主意”并不相同。可能还有其他更简单、更直接的方法来实现你的目标。特别是,如果您的直接目标是避免在生成链接的多个位置中的每个位置重复与链接相关的代码,则可以使用命名模板(或在XSLT 2.0中也是用户定义的函数)保存该代码,并从需要的位置调用该模板(或函数)。任何关于XSLT的好书(大多数严肃的XSLT程序员都相信Michael Kay的书,但我相信还有其他好书)都应该有助于理解如何使用命名模板和xsl:call模板指令或用户定义函数

谢谢你帮我理解。我将尝试使用命名模板-我很犹豫,因为我读到的所有内容都说
xsl:call-template
正是PHP程序员用来使XSLT更像PHP的,而
apply-templates
是正确的XSLT方法。我扩展了我的问题,新信息是否会改变您的答案?确实,您希望在大多数控制流中使用xsl:apply模板。当备选方案是在多个模板中重复代码时,使用xsl:call-template。
<related-links>
    <title>Link text</title>
    <location>http://link-address.whatever</location>
</related-links>
<xsl:template match="item">
     <li>
        <a href="{location}">
        <xsl:if test="number(substring(location,1,4)='http')">
            <xsl:attribute name="class">external</xsl:attribute>
            <xsl:attribute name="target">_blank</xsl:attribute>
        </xsl:if>
            <xsl:value-of select="title" />
        </a>
     </li>
 </xsl:template>