模板是XSLT中定义XML节点转换规则的处理单元,通过match属性使用XPath匹配节点,处理器按优先级选择最具体的模板执行,显式模板覆盖默认行为,结合xsl:apply-templates实现递归处理,形成声明式转换流程。

XSLT中的模板(template)是一段用于定义“当遇到特定XML节点时,该如何转换或输出”的规则。它不是自动执行的函数,而是由XSLT处理器根据匹配条件主动调用的处理单元。
match 属性是模板的核心,它使用XPath表达式指定该模板适用于哪些XML节点。匹配不依赖位置或顺序,只看节点是否满足XPath条件。
<xsl:template match="book"> 匹配所有名为 book 的元素节点(无论嵌套多深)<xsl:template match="/catalog/book[1]"> 只匹配根元素 catalog 下第一个 book 子元素<xsl:template match="@id"> 匹配所有名为 id 的属性节点<xsl:template match="text()"> 匹配所有文本节点(常用于精细控制空白或内容提取)XSLT处理器对每个节点尝试找到最具体的匹配模板。当多个模板都能匹配时,按“静态优先级”决定谁生效——通常更精确的XPath有更高优先级。
match="book/title" 比 match="title" 更具体,优先被选中match="book[@category='fiction']" 比 match="book" 优先级高(带谓词的更具体)match 的模板(如仅用 name)不会自动触发,需显式用 <xsl:call-template> 调用即使没写任何模板,XSLT也有内置默认规则:对元素节点默认递归处理子节点;对文本节点默认原样输出。一旦你写了匹配同一类节点的模板,就覆盖了默认行为。
price 元素显示为“¥{值}”,就写 <xsl:template match="price">¥<xsl:value-of select="."/></xsl:template>
author 写模板,它会走默认规则——继续处理其子节点(比如里面的名字文本)<xsl:apply-templates/> 触发子节点匹配,形成递归处理流基本上就这些。模板的本质是“声明式路由”:你声明“这类节点该这么变”,XSLT引擎负责在遍历XML树时自动分发和执行。
以上就是XSLT中的模板(template)是什么,它如何匹配XML中的节点?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号