在XSLT中组合来自两个参数的路径

时间:2012-12-09 15:41:31

标签: xml templates xslt path

我有一个简单的问题。如何组合两个模板参数的路径?我想做那样的事情:

<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 是单个元素名称。

2 个答案:

答案 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)"/>