我正在尝试修改现有的XSLT以使其适合我的需求,但想了解xsl:apply-templates的正确应用,以处理其他标签。
给出以下现有代码。我想首先了解一些事情。
<xsl:apply-templates/>
,没有select语句。因此,从文档中可以看出,此元素将模板应用于当前元素,或应用于当前元素的子节点。那么,这是否意味着对于与tabelcell的匹配,那么此模板将仅应用于自身(仅当存在选择语句来处理这些子代时才应用于子代)?
如果示例代码中的放置在结束</td>
标记之后而不是内部,是否会有所不同?
如果下面的示例代码中没有<xsl:apply-templates/>
行,那么这是否意味着与tabelcell的匹配什么都不会发生?
<xsl:template match="tablecell">
<td valign="top">
Removed content for simplicity
<xsl:apply-templates/>
</td>
</xsl:template>
如果存在像<tabelcell>
或<par>
这样的<pardef>
的子代,考虑到已经有{{1} }中的<xsl:apply-templates/>
元素中?例如如果我想添加<td>
到目前为止,我只是XSLT的新手,到目前为止,一直没有将带有select语句的xsl:apply-templates元素放到xsl:template标记中。
如果有人可以通过回答上面的问题来澄清我对xsl:apply-templates的行为和用法的理解,那么真是棒极了。
干杯
答案 0 :(得分:1)
因此,从文档中可以看出,此元素将模板应用于 当前元素或当前元素的子节点。
我不知道您在哪里读过这篇文章。这不是真的。这是什么 specs说:
在没有选择属性的情况下,
xsl:apply-templates
指令处理当前节点的所有子节点, 包括文本节点。
是的,它有所作为。现在,将应用模板的结果放置在td
元素的内部中。如果将xsl:apply-templates
指令移到td
元素之外,那么结果将最终出现在输出中。
否。 td
元素仍将创建。它将是空的(或更准确地说,它将仍然包含“为简单起见删除的内容”部分中的内容)。
此问题尚不清楚。如上面#1所述,tablecell
的所有个子代将被处理。如果您向<xsl:apply-templates select="par" />
添加另一条指令,则par
元素将被处理两次。