我在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
答案 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进行评估的需要。