参数化xslt中的KEY匹配属性

时间:2014-08-21 05:19:40

标签: xml xslt

关键属性匹配可以如下参数化吗?

<xsl:param name="contSet">bioSafety|radSafety|Person|animalSpecies</xsl:param>
<xsl:param name="contSet1" select="concat('|',$contSet,'|')"/>
<xsl:param name="list1" select="review/original/*"/>
<xsl:param name="list2" select="review/*"/>
<xsl:param name="path1" select="concat('/review/original','/')"/>
<xsl:param name="path2" select="concat('/review','/')"/>
<xsl:param name="cond1" select="@addcomment = '1'"/>

<xsl:key name="original" match="review/original/*" use="local-name()"/>
<xsl:key name="current" match="review/*" use="local-name()"/>

我想要的是:

<xsl:key name="original" match="$path1" use="local-name()"/>
<xsl:key name="current" match="$path2" use="local-name()"/>

但它不起作用。 请帮忙

2 个答案:

答案 0 :(得分:0)

不,那是不可能的。但是,您可以提前准备好几个关键元素并参数化键的选择,例如:

<xsl:value-of select="key($keyname, 'somevalue')" />

答案 1 :(得分:0)

XSLT中的变量包含值,而不是表达式或模式。

它现在对您没有帮助,但XSLT 3.0的下一个草案可能包含一个可以满足您需求的功能。您可以定义“静态参数”(其值必须在编译时提供),如下所示:

<xsl:param name="path1" static="yes" select="concat('/review/original','/')"/>
<xsl:param name="path2" static="yes" select="concat('/review','/')"/>

然后你可以在样式表的“阴影属性”中使用它们:任何以“_”开头的属性在编译时作为属性值模板进行预先评估:

<xsl:key name="original" _match="{$path1}" use="local-name()"/>
<xsl:key name="current" _match="{$path2}" use="local-name()"/>