XSLT模板优先级由match表达式特异性、priority属性值和导入顺序决定,特异性越高优先级越高,相同则比较priority数值,最后看xsl:import顺序,后导入的优先。

XSLT模板的优先级主要通过三个维度来确定:首先看
match
xsl:template
priority
xsl:import
XSLT的世界里,模板优先级是个常常让人感到“挠头”的问题,尤其是在处理复杂的、多文件或多模块的样式表时。我个人在维护一些老旧的XSLT转换逻辑时,就经常遇到明明写了模板,结果却被另一个“不请自来”的模板给覆盖了,或者反之,某个通用模板“霸道”地捕获了本应由特定模板处理的节点。理解它的工作机制,其实就是掌握了一把解决这些“冲突”的钥匙。
XSLT处理器在遍历XML源文档时,对于每一个节点,都会尝试找到一个最匹配的
xsl:template
match
match
match="book"
match="*"
match="book[author='John']"
match="*[@id='myBook']"
match="library/book"
match="book"
match="*"
match="/"
match="text()"
match="comment()"
match="processing-instruction()"
举个例子,如果我有两个模板:
<xsl:template match="book">...</xsl:template> <xsl:template match="library/book">...</xsl:template>
当处理器遇到一个路径为
/library/book
match
priority
match
xsl:template
priority
priority
priority
match
例如,如果你有两个模板都匹配
book
<xsl:template match="book" priority="1">
<!-- 这个模板优先级更高 -->
</xsl:template>
<xsl:template match="book" priority="0">
<!-- 这个模板优先级较低 -->
</xsl:template>这是一个强大的工具,尤其是在需要覆盖某些通用行为,但又不想写过于复杂的
match
priority
match
导入顺序(xsl:import
xsl:import
如果样式表A导入了样式表B,而样式表A和B中都有一个匹配
book
book
<!-- main.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="common.xsl"/>
<xsl:template match="book">
<!-- main.xsl 中的 book 模板 -->
</xsl:template>
</xsl:stylesheet>
<!-- common.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="book">
<!-- common.xsl 中的 book 模板 -->
</xsl:template>
</xsl:stylesheet>在这种情况下,
main.xsl
book
common.xsl
book
需要注意的是,
xsl:include
xsl:import
xsl:include
理解这三层逻辑,基本就能驾驭大多数XSLT的优先级问题了。实际操作
以上就是XSLT模板优先级如何确定?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号