使用 MarkLogic 补丁更新一个或多个值

Updating one or more values with MarkLogic patch

我正在尝试使用 MarkLogic 的补丁功能(在版本 9.0-9.1 中)来编辑文档的一个或多个元素。在应用程序中,用户将拥有一个填充有原始值的屏幕,并且能够编辑一个或多个字段,然后保存编辑。

我有这样一个文档:

<root>
    <value1>original value</value1>
    <value2>original value</value2>
    <value3>original value</value3>
    <value4>original value</value4>
    <value5>original value</value5>
</root>

我正在尝试使用此更新它(使用一个或多个已编辑内容的值):

<rapi:patch xmlns:rapi="http://marklogic.com/rest-api">
    <rapi:replace-insert context="/root" select="value1">original value</rapi:replace-insert>
    <rapi:replace-insert context="/root" select="value2">original value</rapi:replace-insert>   
    <rapi:replace-insert context="/root" select="value3">edited content</rapi:replace-insert>
    <rapi:replace-insert context="/root" select="value4">original value</rapi:replace-insert>
    <rapi:replace-insert context="/root" select="value5">original value</rapi:replace-insert>   
</rapi:patch>

但是,除非每个字段都有新内容,否则我会收到以下错误:

2020-01-29 21:25:37.425 Info: Status 500: RESTAPI-INVALIDREQ: (err:FOER0000) Invalid request:  reason: invalid patch for uri /FILE0000026.xml: replace-insert without apply or content: /root

有没有一种方法可以在同一请求中更改一个或多个值,而无需动态更新补丁以仅应用于已更改的值?

PATCH 端点期望将替换包装在容器元素中。如果要插入纯文本,请使用 <rapi:text>original value</rapi:text>,否则使用您自己选择的元素。请注意,您正在 替换 元素,因此您可能想要将内容包装在一个元素中,或者使用子元素作为上下文,并且 text() 作为 select.类似于:

  <rapi:patch xmlns:rapi="http://marklogic.com/rest-api">
    <rapi:replace-insert context="/root/value1" select="text()">
      <rapi:text>original value</rapi:text>
    </rapi:replace-insert>
    <rapi:replace-insert context="/root/value2" select="text()">
      <rapi:text>original value</rapi:text>
    </rapi:replace-insert>   
    <rapi:replace-insert context="/root/value3" select="text()">
      <rapi:text>edited content</rapi:text>
    </rapi:replace-insert>
    <rapi:replace-insert context="/root/value4" select="text()">
      <rapi:text>original value</rapi:text>
    </rapi:replace-insert>
    <rapi:replace-insert context="/root/value5" select="text()">
      <rapi:text>original value</rapi:text>
    </rapi:replace-insert>   
  </rapi:patch>

另请参阅我们的 REST 应用程序开发指南:https://docs.marklogic.com/guide/rest-dev/documents#id_74834

HTH!