我有一个简单的问题。如何组合两个模板参数的路径?我想做那样的事情:
<xsl:template match="*[namespace-uri()='show:show']">
<xsl:param name="arg1"/>
<xsl:param name="arg2"/>
<tr>
<td>
<xsl:value-of select="concat($arg1,$arg2)"/>
</td>
</tr>
获取路径:arg1 / arg2但它不起作用。我怎么能这样做呢? 或者你能做什么......
<xsl:value-of select="path/path/$arg2"/>
?
arg1 是从root获取的完整路径, arg2 是单个元素名称。
答案 0 :(得分:2)
要将路径表达式构建为字符串,然后评估它们,您需要一个扩展函数(至少在XSLT 1.0和2.0中),核心规范中没有任何内容支持它,但大多数处理器提供了合适的功能。表达式
<xsl:value-of select="concat($arg1,'/',$arg2)"/>
会产生一个字符串,其中包含字符串值arg1
,斜杠和字符串值arg2
。但是如果arg1是一个节点集并且你将arg2限制为一个元素名称,那么你可以做这样的事情
<xsl:value-of select="$arg1/*[local-name() = $arg2]"/>
(或copy-of
视情况而定)并调用模板
<xsl:with-param name="arg1" select="/path/to/interesting/stuff" />
<xsl:with-param name="arg2" select="'elementname'" />
如果您想允许arg2命名属性而不是元素,请使用
$arg1/@*[.....]
或允许它为(假设arg1
的目标没有属性和具有相同名称的子元素)
$arg1/node()[......]
答案 1 :(得分:0)
你可以这样做
<xsl:value-of select="concat($arg1,'/',$arg2)"/>