1

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

<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是从根开始的完整路径,arg2是单个元素名称。

4

2 回答 2

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()[......]
于 2012-12-09T16:21:29.397 回答
0

You can do like this

<xsl:value-of select="concat($arg1,'/',$arg2)"/>
于 2012-12-09T16:10:36.187 回答