我刚开始使用eXist并尝试将数据插入到xml文件中。到目前为止,我在.xql文件中执行了此操作:
declare function app:save($node as node(), $model as map(*), $name as xs
:string?, $author as xs :string?, $isbn as xs :integer?, $date as xs :integer?) {
for $books in doc("/db/apps/tutorial/library.xml")//LIBRARY/books
return
update insert
<name>$name</name>
<author>$author</author>
<isbn>$isbn</isbn>
<date>$date</date>
into $books
};
我的xml文件文件中的层次结构如下所示:
<?xml version="1.0"?>
<LIBRARY>
<books>
</books>
<magazines>
</magazines>
<audio>
</audio>
<video>
</video>
</LIBRARY>
我只需要插入关于一本书的元数据(来自html),但是exide给了我“意外的令牌:&gt;”。这可能是一个简单的问题,但我遇到了困难。您的贡献将受到高度赞赏。
答案 0 :(得分:0)
更新语句需要单个节点或一系列节点。
要么忘记了像<book/>
这样的包装节点,就会产生类似
update insert <book>
<name>{ $name }</name>
<author>{ $author }</author>
<isbn>{ $isbn }</isbn>
<date>{ $date }</date>
</book>
into $books
或者您必须传递一个序列,其中各个元素由冒号分隔:
update insert (
<name>{ $name }</name>,
<author>{ $author }</author>,
<isbn>{ $isbn }</isbn>,
<date>{ $date }</date>
) into $books
此外,您可能必须将该函数声明为updating
(如注释中所述,而不是eXist DB):
declare updating function app:save(...) { ... }