xml - xsl:apply-templates 正确放置
问题描述
我正在尝试修改现有的 XSLT 以使其适合我的需要,但想了解 xsl:apply-templates 的正确应用程序以处理其他标签。
鉴于以下现有代码。我想首先了解一些事情。
<xsl:apply-templates/>
没有选择语句。因此,从文档中可以看出,该元素将模板应用于当前元素或当前元素的子节点。那么这是否意味着对于与 tabelcell 的匹配,那么这个模板只会应用于它自己(并且只有当有 select 语句来处理这些孩子时才会应用于孩子)?如果示例代码中的放置在结束
</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>
考虑到它已经包含<xsl:apply-templates/>
在<td>
元素中,我将如何修改上述代码以合并此类处理?例如,如果我想添加<xsl:apply-templates select="par" />
我只是 XSLT 的新手,到目前为止,我一直只是在 xsl:template 标记中放置带有 select 语句的 xsl:apply-templates 元素。
如果有人可以通过回答我上面的问题来帮助澄清我对 xsl:apply-templates 的行为和使用的理解,那就太棒了。
干杯,
解决方案
因此,从文档中可以看出,该元素将模板应用于当前元素或当前元素的子节点。
我不知道你在哪里读到这个。这不是真的。以下是 规格说明:
在没有选择属性的情况下,
xsl:apply-templates
指令处理当前节点的所有子节点,包括文本节点。是的,它有所作为。按照您现在的方式,应用模板的结果将放置在元素内
td
。如果您将xsl:apply-templates
指令移到td
元素之外,那么结果将最终出现在输出中。不会。该
td
元素仍将被创建。它只是空的(或者更准确地说,它仍然包含“为简单起见删除的内容”部分中的任何内容)。这个问题不清楚。正如上面#1 中所解释的,所有的孩子都
tablecell
将被处理。如果您添加另一条指令<xsl:apply-templates select="par" />
,则par
元素将被处理两次。
推荐阅读
- javascript - 如何在typeORM中保存@ManyToMany中的关系
- javascript - 如何使用 vuejs 服务器端读取 xml 文件内容?
- latex - 如何减少乳胶中数字之间的垂直间距?
- linq - LINQ EF 和 VS2017
- sql - 带有空白单元格的sql连接
- postgresql - Postgres 的 tcp_keepalives_idle 未更新 AWS ELB 空闲超时
- php - 从clients.json文件到所有用户的PHP mail()函数
- c++ - 在 QT 中显示 HALCON HImage
- django - 使用 vuejs 和 django-rest-auth 进行社交登录的问题
- angular7 - Angular 6我怎样才能回到父母,然后在router.navigate()中找到孩子