XSLT-使用变量存储要在模板中匹配的属性
我有两个模板匹配相同的属性,都有不同的模式(如下所示)。有没有一种方法可以避免写属性两次,每个模板一次,而是将这些属性存储在一个变量中?因此,我没有使用下面的match语句,而是使用match=$styleAttributes这样的匹配,styleAttributes将被设置为所有属性。这将使用版本2.0(Saxon 9.1.0.7)。谢谢XSLT-使用变量存储要在模板中匹配的属性,xslt,xpath,Xslt,Xpath,我有两个模板匹配相同的属性,都有不同的模式(如下所示)。有没有一种方法可以避免写属性两次,每个模板一次,而是将这些属性存储在一个变量中?因此,我没有使用下面的match语句,而是使用match=$styleAttributes这样的匹配,styleAttributes将被设置为所有属性。这将使用版本2.0(Saxon 9.1.0.7)。谢谢 <xsl:template match="@width|@height|@visible|@vAlign|@hAlign|@zOrder|@hOffs
<xsl:template match="@width|@height|@visible|@vAlign|@hAlign|@zOrder|@hOffset|@vOffset|@color|@fontSize" mode="styles">
<!-- Do something -->
</xsl:template>
<!-- Do nothing -->
<xsl:template match="@width|@height|@visible|@vAlign|@hAlign|@zOrder|@hOffset|@vOffset|@color|@fontSize" mode="common" />
好吧,您可以使用
“@*”
匹配所有内容,然后在模板内对照全局变量检查local-name()
,然后根据pass-fail使用不同的@mode=
调用另一个模板
这是一个非常棒的资源,但是对于纯XSLT问题,没有什么能比得上桑树技术运行的xsl列表。XSLT产品的供应商和用户,以及负责规范的W3C委员会的成员都能很好地代表它。即使在a中,也只能将可验证引用作为谓词的一部分或作为or函数的参数(表达式)的一部分。
这决定了直接问题的否定答案。
但是,如果我们需要避免在两个只因模式不同的模板中重复相同的匹配模式,那么实现这一点的一种方法是只使用一个没有模式的模板,并将模式作为参数传递给模板
下面是一个小例子:
当上述转换应用于此XML文档时:
<div width="50"/>
生成所需结果:
<div width="50"/>
来自公共处理器的Hello这里唯一的问题是这样做可能会影响XSLT处理器的优化。