我有2个模板
<template match="vehicle_details[preceding-sibling::vehicle_type = '4x4']/*">
...
</xsl:template>
<xsl:template match="vehicle_details[descendant::color = 'red']/*" >
...
</xsl:template>
我的问题是:哪个模板优先于转换。有人可以给我一个关于XSL模板优先级的概述/资源吗?
提前致谢!
答案 0 :(得分:43)
section 5.5 of the XSLT spec中描述了完整的解决方案流程。
一般而言,以下规则按顺序适用(例如,由于导入优先级较低而被排除在考虑范围之外的模板将永久消除,无论其优先级如何):
priority
属性值较高的模板优先级较高priority
属性的模板被分配了默认优先级。具有更多特定模式的模板优先。在您的特定情况下,两个模板具有相同的优先级,因此适用上述#4。为了证明:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match=
"vehicle_details[preceding-sibling::vehicle_type = '4x4']/*">
template1
</xsl:template>
<xsl:template match="vehicle_details[descendant::color = 'red']/*">
template2
</xsl:template>
</xsl:stylesheet>
应用于此输入(两个模板匹配):
<root>
<vehicle_type>4x4</vehicle_type>
<vehicle_details>
<color>red</color>
</vehicle_details>
</root>
输出:
template2
但是如果我们交换模板的顺序:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="vehicle_details[descendant::color = 'red']/*">
template2
</xsl:template>
<xsl:template match=
"vehicle_details[preceding-sibling::vehicle_type = '4x4']/*">
template1
</xsl:template>
</xsl:stylesheet>
然后输出是:
template1