使用 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!
我正在尝试使用 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!