Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用param值作为xpath用于xslt的每个_Xslt_Mule - Fatal编程技术网

如何使用param值作为xpath用于xslt的每个

如何使用param值作为xpath用于xslt的每个,xslt,mule,Xslt,Mule,在xsl中,我有一个param值,在xslt转换中,该值将被分配到某个where。但我得到的参数是一个字符串,该参数可能包含一个节点a无界[0或更多重复]。如何将param用作任何xpath表达式所使用的任何其他xml内容 以下是我的示例XML: RetreiveData.xml <soap-content> ------ <return> <!--0 or more repetitions>--> <data> <startdate&

在xsl中,我有一个param值,在xslt转换中,该值将被分配到某个where。但我得到的参数是一个字符串,该参数可能包含一个节点a无界[0或更多重复]。如何将param用作任何xpath表达式所使用的任何其他xml内容

以下是我的示例XML: 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>

------
12-12-12
12-12-13
5.
----
这是我的示例文件,它将作为参数发送到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 ?

---
----杜斯特鲁夫
这是一个错误。如果某个节点是param,我如何才能转移到该节点?
我知道这可以通过使用分配给xml文件中路径的变量来实现。但在我的场景中建议使用这种方法

有人能帮我解决这个问题吗

提前感谢,,
Eresh

如果您发布的代码是格式良好的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求值的需要。

最有可能的错误是由于每个标记的
格式不正确。您需要使用
select
属性名称:
xsl:for each select=“$retrieve/return/data”>
此标记的格式也不正确:
,并且您的
param
元素缺少其名称空间前缀。有人投票否决了我在上述代码中提到的错误(谢谢,您摇滚乐了)但是仍然存在错误:
param
被声明为“retrieve”并用作“retrieve”。您使用的是XSLT1.0还是XSLT2.0?