关键属性匹配可以如下参数化吗?
<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()"/>
但它不起作用。 请帮忙
答案 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()"/>