我之前對這個問題有類似的問題,但我仍然沒有正確處理這種情況,首先我說我是這個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