插入数据库 - xquery并存在db

时间:2014-12-20 18:10:02

标签: xml xquery exist-db

我刚开始使用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;”。这可能是一个简单的问题,但我遇到了困难。您的贡献将受到高度赞赏。

1 个答案:

答案 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(...) { ... }