我正在使用eXist-db創建基於Web的數據庫應用程序。 我的願望是將用戶在用XForms創建的公式中插入的數據保存到數據庫中。對於整個數據結構保存在變量$content
我在數據庫中存儲與一個XQuery模塊,這樣的:在使用eXist-db和XQuery存儲數據之前更新內存中節點
declare
%rest:PUT("{$content}")
%rest:path("/items")
function ffdb:change-items($content as node()*) {
let $data := <items>
{ $content/items/* }
</items>
let $stored := xmldb:store($config:app-root, "1234.xml", $data)
return
doesnotmatter:function()
};
在這個例子$內容包含以下節點集:
<items>
<item1>A</item>
<item2>B</item>
<itemlist>
<item3>C</item3>
<itemlist/>
<items>
這一工程精細。我現在的問題是,我想在將內容存儲到數據庫之前,將內容爲'D'的節點插入到$ content/items/itemlist中。存儲結果應該是:
<items>
<item1>A</item>
<item2>B</item>
<itemlist>
<item3>C</item3>
<item3>D</item3>
<itemlist/>
<items>
這似乎是更困難的,因爲我認爲。我試圖改變查詢一百次,我想。 當我嘗試直接在$content
中插入節點集時,我收到XQuery更新表達式無法應用於內存節點的消息。 當我嘗試在聲明它存儲數據之後嘗試插入節點集$data
時,但不幸的是沒有節點集。
我也是從https://github.com/ryanjdew/XQuery-XML-Memory-Operations安裝的模塊,然後在開始插入這樣的:
let $content2 := mem:copy($content) !
(
mem:insert-child(., $content/items/itemlist, attribute new-attribute {"item3"}),
mem:execute(.))
之後我插入$內容2,而不是$content
同時宣佈$的數據。我得到的消息是:
org.exist.xquery.XPathException: mem-op:MIXEDSOURCES The nodes to change are coming from multiple sources [at line 249, column 3, source: /db/apps/myapp/modules/memoryoperations/memory-operations-pure-xquery.xqy]
真的不知道該怎麼辦。我也嘗試在存儲它之後加載文檔並在此處插入節點集,以便我不更改內存數據,但這也不起作用。節點集沒有被插入。
哪版本o親愛的? – joewiz
請注意,您提供的示例XML格式不正確。 – joewiz