[英]how to document insert with the collections in Marklogic using XQuery
[英]How to return a existing document except an element using xquery in marklogic
我有一个我写的文档忽略文档中的元素 id 并返回文档如下但抛出错误
let $ex := fn:doc("/name/docs")/* except $ex//sar:id return $ex
回报
错误:未定义的变量 $ex
您正试图在let
语句中引用let
变量。 你不能那样做。
let
可以为文档创建一个变量,然后在类似的语句中使用它:
let $doc := fn:doc("/name/docs")
let $ex := $doc/* except $doc//sar:id
return $ex
或者您可以使用一个简单的映射运算符:
let $ex := fn:doc("/name/docs") ! (./* except .//sar:id)
return $ex
这将从文档中返回一系列子元素(但文档只有一个直接子元素,因此除非它恰好是sar:id
,否则可能无法实现您正在尝试做的事情。
如果你想返回一个包含除sar:id
元素之外的所有内容的新文档,那么你可以通过 XSLT 运行它,这是一个修改后的身份转换,带有一个匹配要排除的元素的空模板:
declare variable $XSLT :=
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:sar="sar-namespace-needs-to-be-updated-here">
<!--this generic template matches on, and copies all attributes and nodes by default-->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--this empty template will ensure that the sar:id is dropped from the output-->
<xsl:template match="sar:id"/>
</xsl:stylesheet>;
xdmp:xslt-eval($XSLT, fn:doc("/name/docs"))
否则,您可以使用类型切换通过递归下降 function 运行它。 我发现 XSLT 更短也更容易写,但这是个人喜好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.