![](/img/trans.png)
[英]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.