模板是XSLT中定义XML节点转换规则的处理单元,通过match属性使用XPath匹配节点,处理器按优先级选择最具体的模板执行,显式模板覆盖默认行为,结合xsl:apply-templates实现递归处理,形成声明式转换流程。
XSLT中的模板(templat)是一段用于定义“当遇到特定XML节点时,该如何转换或输出”的规则。它不是自动执行的函数,而是由XSLT处理器根据匹配条件主动调用的处理单元。
e
match 属性是模板的核心,它使用XPath表达式指定该模板适用于哪些XML节点。匹配不依赖位置或顺序,只看节点是否满足XPath条件。
匹配所有名为 book 的元素节点(无论嵌套多深) 只匹配根元素 catalog 下第一个 book 子元素 匹配所有名为 id 的属性节点 匹配所有文本节点(常用于精细控制空白或内容提取)XSLT处理器对每个节点尝试找到最具体的匹配模板。当多个模板都能匹配时,按“静态优先级”决定谁生效——通常更精确的XPath有更高优先级。
match="book/title" 比 match="title" 更具体,优先被选中match="book[@category='fiction']" 比 match="book" 优先级高(带谓词的更具体)match 的模板(如仅用 name)不会自动触发,需显式用 调用即使没写任何模板,XSLT也有内置默认规则:对元素节点默认递归处理子节点;对文本节点默认原样输出。一旦你写了匹配同一类节点的模板,就覆盖了默认行为。
price 元素显示为“¥{值}”,就写 ¥
author 写模板,它会走默认规则——继续处理其子节点(比如里面的名字文本) 触发子节点匹配,形成递归处理流基本上就这些。模板的本质是“声明式路由”:你声明“这类节点该这么变”,XSLT引擎负责在遍历XML树时自动分发和执行。