【问题标题】:Update XML file with XQuery Issue使用 XQuery 问题更新 XML 文件
【发布时间】:2015-05-08 11:28:03
【问题描述】:

我正在尝试使用以下 XQuery(在 eXide 中)更新 XML 文件中的节点:

xquery version "3.0";

let $update := doc('db/apps/xmlFiles/Customers.xml')//Customers[ID = 6]
return replace value of node $update/LastName with 'Morris'

但我收到了阻止我运行查询的错误:

执行表达式时发现错误:org.exist.xquery.XPathException: err:XPST0003 unexpected token: value [at line 4, column 16]

有谁知道这可能是什么问题?任何帮助和建议将不胜感激

【问题讨论】:

  • 您在寻找具有该 ID 的客户吗?如果是这样,那就是//Customers[ID=6]。如果是孩子,//Customers/*[ID=6]
  • 作为未来的说明 - 任何删除大量信息以使先前给出的答案不适用的编辑都被认为是错误的形式/在这里不是犹太教。当这样的编辑是适当的(而不是提出一个新的、单独的问题——这通常是正确的事情),应该通过添加额外的信息来完成,但保留旧的信息。
  • 无论如何——既然你已经做出了我建议的更正,你的新错误是我无法在 BaseX 的 XQUF 实现中复制的错误(在那里完美运行),所以我需要推迟给熟悉 eXist 的人。
  • ...虽然有一个差异——我在我的版本中使用db:open() 而不是doc()
  • 很抱歉我用更新版本替换旧代码时出错,我是这个论坛的新手,所以不知道网站的规则和协议。我在我的代码中尝试了 db:open() 并且错误消息没有改变。嗯,这很奇怪也很烦人!

标签: xquery exist-db xquery-update


【解决方案1】:

正如@dirkk 所提到的,eXist 不支持 XQUF 1.0,而是实现了 XQUF 的早期草案版本。但是,您仍然可以使用此代码做您想做的事情:

xquery version "3.0";

let $update := doc('db/apps/xmlFiles/Customers.xml')//Customers[ID = 6]
return
    update value $update/LastName with 'Morris'

请注意,在 eXist 中,更新立即就地应用于数据库中的节点,这与 XQUF 1.0 不同,在 XQUF 1.0 中创建 PUL(待处理更新列表),然后在查询完成时应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2012-01-02
    相关资源
    最近更新 更多