如何在xslt的for-each中使用用作xpath的param值

时间:2013-01-16 18:24:53

标签: xslt mule

我在xsl中有一个情况,我有一个param值,将在xslt转换中指定一些位置。但我把那个参数作为一个字符串,该参数可能包含一个无界的[0次或多次重复]节点。我如何使用param作为任何xpath内容使用的任何xpath内容。

这是我的示例xmls: RetreiveData.xml

<soap-content>
------
<return>
<!--0 or more repetitions>-->
<data>
<startdate>12-12-12</startdate>
<enddate>12-12-13</enddate>
<nooftrans>5</nooftrans>
</data>
<data>
----
</data>

</soap=content>

这是我的示例文件,它将作为参数发送到xsl

xsl文件:

<xsl style>
<param name ="retrieve"></param>
---
<xsl:for-each ="$retreive/return/data">
----do strufff
</xsl:for-each>


This was throwing an error . How can i travese to a node if it is param ?

我知道这可以使用分配给xml文件中的路径的变量来完成。但是在我的场景中建议使用该方法。

任何人都可以帮我解决这个问题

提前致谢, Eresh

1 个答案:

答案 0 :(得分:0)

如果您发布的代码格式正确XSLT但猜测您的意思,那么如果$ retrieve是单个元素名称,那么这将有所帮助

<param name ="retrieve"></param>
---
<xsl:for-each select="*[name()=$retrieve]/return/data">
----do stuff
</xsl:for-each>

请注意,XPath变量包含的值不是表达式的片段。如果$retrieve保留字符串"root",则$retrieve/return/data不是root/return/data/"root"/return/data这是一种语法/类型错误,就像在大多数语言中一样。如果c或fortran中有字符串“x”,则表达式“x”+ 1不会向变量 x添加一个字符串。为此,您需要在运行时提供XPath解析器。有些产品有扩展(并且有针对XPath 3的评估函数)但是对于简单的情况,上面的内容避免了将字符串作为XPath进行评估的需要。