XSLT xsl:template 元素

XSLT <xsl:template> 元素最全详解(2025 年最新版)

<xsl:template>XSLT 中最核心、最常用的元素,没有之一。
所有转换逻辑几乎都靠它来实现。

一、基本语法(两种写法)

<!-- 写法1:最常用,基于匹配模式(推荐) -->
<xsl:template match="表达式">
  <!-- 这里写当匹配到节点时要输出的内容 -->
</xsl:template>

<!-- 写法2:命名模板(像函数一样调用) -->
<xsl:template name="我的模板名">
  <!-- 可以用 <xsl:call-template name="我的模板名"/> 来调用 -->
</xsl:template>

二、重要属性一览表(记住这 4 个就够 99% 场景)

属性是否必填说明常见值举例
match选填用 XPath 表达式匹配节点(模式匹配)match="/"match="book"match="//item[@price>100]"
name选填给模板起个名字,之后可以调用name="header"name="format-price"
mode选填同一节点用不同模式处理(防止冲突)mode="toc"mode="content"
priority极少用当多个模板都能匹配时,指定优先级(数字越大越优先)priority="10"

注意matchname 不能同时出现在同一个 <xsl:template> 上(除非 XSLT 3.0 特殊情况)。

三、最常见 6 种用法(直接复制粘贴就能用)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- 1. 匹配文档根节点(几乎所有 XSLT 都从这里开始) -->
  <xsl:template match="/">
    <html>
      <xsl:apply-templates/>
    </html>
  </xsl:template>

  <!-- 2. 匹配所有 book 元素 -->
  <xsl:template match="book">
    <div class="book">
      <xsl:apply-templates select="title"/>
      <xsl:apply-templates select="author"/>
    </div>
  </xsl:template>

  <!-- 3. 匹配 title 元素(并加粗显示) -->
  <xsl:template match="title">
    <h2><xsl:value-of select="."/></h2>
  </xsl:template>

  <!-- 4. 命名模板(像函数一样被调用) -->
  <xsl:template name="page-footer">
    <hr/>
    <p style="text-align:center; color:gray;">
      Copyright © 2025 · Generated by XSLT
    </p>
  </xsl:template>

  <!-- 5. 使用 mode 实现同一节点不同处理(经典用法) -->
  <xsl:template match="book" mode="list">
    <li><xsl:value-of select="title"/> - <xsl:value-of select="author"/></li>
  </xsl:template>

  <xsl:template match="book" mode="detail">
    <div class="card">
      <h3><xsl:value-of select="title"/></h3>
      <p>作者:<xsl:value-of select="author"/></p>
      <p>价格:¥<xsl:value-of select="price"/></p>
    </div>
  </xsl:template>

  <!-- 6. 匹配所有元素,啥也不干(用于调试或屏蔽输出) -->
  <xsl:template match="*">
    <!-- 什么都不输出 -->
  </xsl:template>

</xsl:stylesheet>

四、如何调用模板

场景写法
自动应用匹配的模板<xsl:apply-templates select="book"/>
指定 mode<xsl:apply-templates select="book" mode="detail"/>
调用命名模板<xsl:call-template name="page-footer"/>
带参数调用(XSLT 1.0)“`xml
#### 五、XSLT 内置默认模板(你一定要知道!)

即使你什么模板都不写,XSLT 也会自动帮你加上这两条“隐形模板”:

xml

这就是为什么你只写 `<xsl:apply-templates/>` 就能看到原始文本的原因。

#### 六、实战技巧(老手都在用)

1. **永远从 `match="/"` 开始**  
   这是标准写法,确保整个文档有根容器(如 `<html>`)。

2. **用 `mode` 解决冲突**  
   同一个 XML 要生成目录和正文时,必用 mode。

3. **用命名模板写可复用组件**  
   页眉、页脚、价格格式化、日期格式化等都写成命名模板。

4. **用优先级解决匹配冲突(极少用)**  

xml


“`

七、一句话总结

<xsl:template> 就是 XSLT 的“函数”
你告诉它“当遇到某种节点时,就执行这里的代码”。
整个 XSLT 的威力,99% 都来自对 <xsl:template> 的巧妙使用。

需要我立刻帮你写一个包含多种 <xsl:template> 用法的完整可运行示例吗?
直接说你要实现什么效果(比如 XML 转 Bootstrap 卡片、转 Markdown、转 JSON),我 30 秒给你成品!

文章已创建 2732

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部