如何通过MarkLogic REST API获取文档特定补丁及指定节点数据?
嘿,我来帮你搞定这两个MarkLogic REST API的问题,亲测实用!
MarkLogic的REST API专门提供了PATCH方法来实现文档的局部更新,不用全量替换整个文档。举个例子,假设你要更新那个用户文档里的<firstname>节点,操作步骤如下:
- 请求方式:
PATCH - 请求地址:
/v1/documents?uri=/your-doc-path/user.xml(把/your-doc-path/user.xml换成你实际的文档URI) - 请求头:设置
Content-Type为application/json或者application/xml(看你用哪种格式写补丁指令)
如果你用JSON格式写补丁,请求体是这样的:
{ "patch": [ { "replace": { "select": "/user/firstname", "content": "<firstname>UpdatedName</firstname>" } } ] }
这里的select用XPath精准定位要修改的节点,replace就是替换这个节点的内容。要是习惯XML格式,请求体可以写成这样:
<patch xmlns="http://marklogic.com/rest-api"> <replace select="/user/firstname"> <firstname>UpdatedName</firstname> </replace> </patch>
注意哦,你得有这个文档的写入权限,不然会报错哒。
要只取出文档里的<firstname>内容,用GET请求结合/v1/documents端点就行,有两种简单方法:
方法1:直接用extract参数指定XPath
这是最快捷的方式,不用额外配置:
- 请求方式:
GET - 请求地址:
/v1/documents?uri=/your-doc-path/user.xml&extract=/user/firstname - 请求头:可以设
Accept: application/xml,这样返回的就是纯XML节点;要是想转成JSON,设Accept: application/json就行
发送这个请求后,你拿到的结果就是<firstname>name</firstname>,完美符合你的需求!
方法2:用自定义转换(适合复杂场景)
如果以后要复用复杂的提取逻辑,比如同时取多个节点或者做格式转换,可以创建一个XSLT转换文件。比如写个extract-firstname.xsl:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:copy-of select="/user/firstname"/> </xsl:template> </xsl:stylesheet>
先把这个文件上传到MarkLogic的REST配置里:用PUT请求/v1/config/transforms/extract-firstname,请求体就是上面的XSLT内容。之后再获取特定节点时,请求地址就改成:GET /v1/documents?uri=/your-doc-path/user.xml&transform=extract-firstname
小提醒
如果你的XML文档带命名空间,那XPath得加上命名空间前缀,或者在请求里用namespace参数指定,不然会匹配不到节点哦。还有,别忘了要有文档的读取权限~
内容的提问来源于stack exchange,提问作者Uzair Aslam

