Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT-使用变量存储要在模板中匹配的属性_Xslt_Xpath - Fatal编程技术网

XSLT-使用变量存储要在模板中匹配的属性

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

我有两个模板匹配相同的属性,都有不同的模式(如下所示)。有没有一种方法可以避免写属性两次,每个模板一次,而是将这些属性存储在一个变量中?因此,我没有使用下面的match语句,而是使用match=$styleAttributes这样的匹配,styleAttributes将被设置为所有属性。这将使用版本2.0(Saxon 9.1.0.7)。谢谢

<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处理器的优化。