gpt4 book ai didi

xslt - 不能停止从程序方面考虑 XSLT... 帮助应用模板

转载 作者:行者123 更新时间:2023-12-04 22:26:32 26 4
gpt4 key购买 nike

我知道 XSLT 在程序方面不起作用,但不幸的是,我从事程序语言的时间太长了。任何人都可以通过简单地解释诸如应用模板之类的东西是如何工作的来帮助我,并帮助像我这样的人理解它。

最佳答案

是什么让您认为程序条款不适用于此处?只是调用约定比您传统上期望的要隐含一些,因为涉及到一个不可见的上下文。 apply-templates 所做的一切都可以用过程术语来表达。

基本上,apply-templates 只不过是一个 for-each 循环。从您当前在文档中的位置(上下文,想想“this ”)开始,它遍历子节点。

对于每个 child ,处理器选择具有最高优先级的匹配 xsl:template(基于它们各自的 matchpriority 属性),为手头的 child 设置上下文并运行这个模板(想想“function”)。模板返回后,上下文会恢复原状,轮到下一个 child 了。

即使事情变得递归(这在 XSLT 中有点难以避免),整个过程也不会变得更加复杂。上下文“指针”被移动,模板被调用。

您可以使用 apply-templates 属性限制 select 迭代的节点集:

<!-- all children of the context node regardless -->
<xsl:apply-templates />

<!-- all children of the context node being "data" with a @name of "Foo" -->
<xsl:apply-templates select="data[@name='Foo']" />

如果您愿意,您可以在迭代之前对节点集进行排序:
<!-- all children of the context node being "data" with a @name of "Foo",
ordered by their respective "detail" count -->
<xsl:apply-templates select="data[@name='Foo']">
<xsl:sort select="count(detail)" data-type="number" order="descending"/>
</xsl:apply-templates>

如果需要,您可以将参数传递给模板,就像使用常规函数调用一样:
<!-- pass in some parameter -->
<xsl:apply-templates select="data[@name='Foo']">
<xsl:with-param name="DateSetIcon" select="$img_src" />
</xsl:apply-templates>

这就是它的全部内容。

编辑:

我知道最后一条评论有点挑衅。这是非常有意的,对于 apply-templates 如何工作的基本理解,这或多或少是这样。不是您定义要调用的模板,而是让处理器为您选择正确的模板,这带来的影响和可能性当然比未经训练的耳朵听起来要大。整个事情的声明式/隐式方法肯定需要一些时间来理解。

关于xslt - 不能停止从程序方面考虑 XSLT... 帮助应用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/333463/

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