簡體   English   中英

如何在 marklogic 中使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM