xsl:apply-templates正确放置

时间:2018-10-30 07:30:24

标签: xml xslt

我正在尝试修改现有的XSLT以使其适合我的需求,但想了解xsl:apply-templates的正确应用,以处理其他标签。

给出以下现有代码。我想首先了解一些事情。

  1. <xsl:apply-templates/>,没有select语句。因此,从文档中可以看出,此元素将模板应用于当前元素,或应用于当前元素的子节点。那么,这是否意味着对于与tabelcell的匹配,那么此模板将仅应用于自身(仅当存在选择语句来处理这些子代时才应用于子代)?

  2. 如果示例代码中的放置在结束</td>标记之后而不是内部,是否会有所不同?

  3. 如果下面的示例代码中没有<xsl:apply-templates/>行,那么这是否意味着与tabelcell的匹配什么都不会发生?

    <xsl:template match="tablecell"> <td valign="top"> Removed content for simplicity <xsl:apply-templates/> </td> </xsl:template>

  4. 如果存在像<tabelcell><par>这样的<pardef>的子代,考虑到已经有{{1} }中的<xsl:apply-templates/>元素中?例如如果我想添加<td>

到目前为止,我只是XSLT的新手,到目前为止,一直没有将带有select语句的xsl:apply-templates元素放到xsl:template标记中。

如果有人可以通过回答上面的问题来澄清我对xsl:apply-templates的行为和用法的理解,那么真是棒极了。

干杯

1 个答案:

答案 0 :(得分:1)

  1.   

    因此,从文档中可以看出,此元素将模板应用于   当前元素或当前元素的子节点。

    我不知道您在哪里读过这篇文章。这不是真的。这是什么 specs说:

      

    在没有选择属性的情况下,xsl:apply-templates指令处理当前节点的所有子节点,   包括文本节点。

  2. 是的,它有所作为。现在,将应用模板的结果放置在td元素的内部中。如果将xsl:apply-templates指令移到td元素之外,那么结果将最终出现在输出中。

  3. 否。 td元素仍将创建。它将是空的(或更准确地说,它将仍然包含“为简单起见删除的内容”部分中的内容)。

  4. 此问题尚不清楚。如上面#1所述,tablecell所有个子代将被处理。如果您向<xsl:apply-templates select="par" />添加另一条指令,则par元素将被处理两次