gpt4 book ai didi

xslt - XSL中的 'call-template'和 'apply-templates'有什么区别?

转载 作者:行者123 更新时间:2023-12-03 04:38:21 31 4
gpt4 key购买 nike

我是 XSLT 新手,所以我对这两个标签有点困惑,

<xsl:apply-templates name="nodes">

<xsl:call-template select="nodes"> 

那么你能列出它们之间的区别吗?

最佳答案

<xsl:call-template>与在传统编程语言中调用函数非常相似。

您可以在 XSLT 中定义函数,例如这个输出字符串的简单函数。

<xsl:template name="dosomething">
<xsl:text>A function that does something</xsl:text>
</xsl:template>

可以通过 <xsl:call-template name="dosomething"> 调用该函数.

<xsl:apply-templates>有点不同,这就是 XSLT 的真正威力:它需要任意数量的 XML 节点(无论您在 select 属性中定义什么),处理每个节点(不一定以任何预定义的顺序),有人可能会说apply-templates 的工作方式类似于循环,但情况并非如此,因为节点可以按任何顺序(甚至并行)进行处理,并为它们找到匹配的模板:

<!-- sample XML snippet -->
<xml>
<foo /><bar /><baz />
</xml>

<!-- sample XSLT snippet -->
<xsl:template match="xml">
<xsl:apply-templates select="*" /> <!-- three nodes selected here -->
</xsl:template>

<xsl:template match="foo"> <!-- will be called once -->
<xsl:text>foo element encountered</xsl:text>
</xsl:template>

<xsl:template match="*"> <!-- will be called twice -->
<xsl:text>other element countered</xsl:text>
</xsl:template>

通过这种方式,您放弃了对 XSLT 处理器的一点控制 - 不是您决定程序流的去向,而是处理器通过查找当前正在处理的节点的最合适匹配来决定。

如果多个模板可以匹配一个节点,则具有更具体匹配表达式的模板获胜。如果存在多个具有相同特性的匹配模板,则最后声明的模板获胜。

您可以更加专注于开发模板,而需要更少的时间来进行“管道疏通”。您的程序将变得更强大、模块化、嵌套深度更少且速度更快(因为 XSLT 处理器针对模板匹配进行了优化)。

使用 XSLT 需要理解的一个概念是“当前节点”。与<xsl:apply-templates>当前节点在每次迭代中都会继续移动,而 <xsl:call-template>不改变当前节点。 IE。 .被调用模板内引用与 . 相同的节点在调用模板中。 apply-templates 则不是这种情况。

这是基本的区别。模板还有一些其他方面会影响其行为: 它们的 modepriority ,事实上模板可以同时具有 name和一个 match 。模板是否已导入 ( <xsl:import> ) 也会产生影响。这些是高级用途,您可以在到达那里后处理它们。

关于xslt - XSL中的 'call-template'和 'apply-templates'有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478045/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com