Marklogic 如何在导出文档时排除元素?

Marklogic 如何在导出文档时排除元素?,marklogic,Marklogic,我在MarkLogic中存储了数千个XML文档。如何在$uris中排除元素instructorName和studentName,然后保存到文件 此代码将每个元素保存到文件中。我不想包含要保存到xml文件中的元素“instructorName”和“studentName” let $uris := cts:uris( (), ("descending"), cts:and-query(( cts:collection-query(("/courses")

我在MarkLogic中存储了数千个XML文档。如何在
$uris
中排除元素
instructorName
studentName
,然后保存到文件

此代码将每个元素保存到文件中。我不想包含要保存到xml文件中的元素“instructorName”和“studentName”

let $uris :=
  cts:uris(
    (),
    ("descending"),
    cts:and-query((
        cts:collection-query(("/courses")),
        cts:element-value-query(
          xs:QName("note"), "COGNITIVE   SCIENCE", "case-insensitive")
    ))
  )
for $uri in $uris
let $doc := fn:doc($uri)
let $courseID := fn:data($doc//meta:courseid)
return xdmp:save(fn:concat("/output/",$courseID,".xml"), $doc)
提前谢谢 Thichxai

不应使用cts:uris()后跟fn:doc(),而应使用cts:search()一次性获取与查询匹配的文档:

除此之外,我不完全确定你想要实现的两个目标中的哪一个

如果要提取这些元素以外的元素,请使用XPath。特定的XPath将取决于文档的结构,但假设这些是顶级子元素,该方法类似于:

for $doc in cts:search(...)
let $root := $doc/*
let $hide := $root/(instructorName|studentName)
let $keep := ($root/node() except $hide)
let $newDoc := document-node{element {node-name($root)} {$keep}}
return xdmp:save(..., $newDoc)
如果要隐藏包含这些元素的文档,请尝试将查询更改为以下内容:

cts:and-query((
    cts:collection-query("/courses"),
    cts:not-query(
        cts:element-query(
            (xs:QName("instructorName"), xs:QName("studentName")),
            cts:true-query()
            ))
    ))
有关更多信息,请参阅:

希望这会有所帮助,

您不应该使用cts:uris()后跟fn:doc(),而应该使用cts:search()一次性获取与查询匹配的文档:

除此之外,我不完全确定你想要实现的两个目标中的哪一个

如果要提取这些元素以外的元素,请使用XPath。特定的XPath将取决于文档的结构,但假设这些是顶级子元素,该方法类似于:

for $doc in cts:search(...)
let $root := $doc/*
let $hide := $root/(instructorName|studentName)
let $keep := ($root/node() except $hide)
let $newDoc := document-node{element {node-name($root)} {$keep}}
return xdmp:save(..., $newDoc)
如果要隐藏包含这些元素的文档,请尝试将查询更改为以下内容:

cts:and-query((
    cts:collection-query("/courses"),
    cts:not-query(
        cts:element-query(
            (xs:QName("instructorName"), xs:QName("studentName")),
            cts:true-query()
            ))
    ))
有关更多信息,请参阅:


希望这能有所帮助,即将发布的MarkLogic 9具有元素级安全性,我认为这将解决这个问题。 描述它是如何工作的


您希望创建一个用户,该用户对整个文档具有读取权限,但对instructorName/studentName XPath没有读取权限。然后作为该用户运行以将文档转储到文件。

即将推出的MarkLogic 9具有元素级安全性,我认为这将解决此问题。 描述它是如何工作的


您希望创建一个用户,该用户对整个文档具有读取权限,但对instructorName/studentName XPath没有读取权限。然后以该用户的身份运行以将文档转储到文件。

谢谢您的回答。我想做的是感谢你回答我的问题。我试了一下,效果很好。让$copymeta:={$doc//meta:Metadata/*[(fn:local-name()!=“instructorname”)]让$newdoc:={$copymeta}谢谢您的回答。我想做的是感谢你回答我的问题。我试了一下,效果很好。let$copymeta:={$doc//meta:Metadata/*[(fn:local-name()!=“instructorname”)]let$newdoc:={$copymeta}