我之前对这个问题有类似的问题,但我仍然没有正确处理这种情况,首先我说我是这个XQuery语言的新手,因此配置递归策略对我来说现在真的很难。XQuery递归函数
XQuery来执行示例代码:
declare variable $stuff :=
<doc>
<embed-session>
<session>
<title>Fred Smith</title>
<session>
<title>Ahmet Özcan</title>
<session>
<title>Erman Bey</title>
</session>
</session>
</session>
</embed-session>
</doc>;
declare function local:change($node as node()) as element()
{
typeswitch($node)
case element() return
element { fn:node-name($node) } {
attribute title {data($node/title)},
$node/session ! local:change(.)
}
default return $node
};
local:change($stuff/embed-session/session)
The output of the code :
<session title="Fred Smith">
<session title="Ahmet Özcan">
<session title="Erman Bey"/>
</session>
</session>
看来,它与我的预期符合,但如果我多了一个嵌入会话节点添加到我的东西变量,例如:
<embed-session>
<session>
<title>Ferhat Bey</title>
</session>
</embed-session>
到我的函数参数如下: [XPTY0004]不能将item()序列作为节点()处理:(...,)
预期的cod输出E添加后下面提到的嵌入会话:
<session title="Fred Smith">
<session title="Ahmet Özcan">
<session title="Erman Bey"/>
</session>
</session>
<session title="Ferhat Bey"/>
我知道这是序列,但为什么我不能指定序列节点作为参数?
请始终添加实际和预期的输出以及发生的任何错误。代码,这不起作用通常是你正在尝试做什么的一个不好的描述。 – 2014-12-03 08:42:49
@JensErat我只是想描述我的目标,作为一种算法,因为主要的东西是我的语法和功能的返回类型,我尝试了很多东西,我总是有例外,所以我不能把代码我的例子,决定描述我需要的方式。 – Hayra 2014-12-03 09:00:52
@Hayra Jens'已经说过,你的问题是缺乏信息。说实话,我不知道你在努力达成什么,因此我无法帮助你。你没有给出任何错误描述或描述你想要做什么。正如你所说,你的语法对于xquery来说看起来非常不对,但我们怎么能帮助你呢?如果您想了解完整的语法,您可能需要阅读一本书或规范。 – dirkk 2014-12-03 09:04:19