marklogic - 仅通过传递部分节点名称获取子节点的 XPath

标签 marklogic marklogic-8

我在 MarkLogic 中存储了以下 XML,

<testDoc>
    <test>
        <test1>test1</test1>
        <test2>test2</test2>
        <test3>test3</test3>
    </test>
</testDoc>

我的要求是仅获取子节点的xpath,如果我将测试(部分节点名称)传递给我的xquery,那么我期待

/testDoc/test/test1
/testDoc/test/test2
/testDoc/test/test3

但我的 xquery 返回,

/testDoc
/testDoc/test
/testDoc/test/test1
/testDoc/test/test2
/testDoc/test/test3

我正在 qconsole 上执行的 XQuery 是,

 xquery version "1.0-ml";
 let $xml := document { fn:doc("/test/testDoc")}
 let $elem-name := "test"
 let $elems := $xml//*[local-name()[contains(lower-case(.), lower-case($elem-name))]]
 return $elems ! xdmp:path(.)

请指导我实现我的要求。

最佳答案

我不确定您是否正在尝试匹配特定深度或仅匹配叶节点。如果只想获取叶子节点,可以添加谓词来检查是否有子元素

[fn:not(./*)]

您还可以重写谓词并使用 fn:matches() 进行匹配

let $elems := $xml//*[fn:not(./*)][fn:matches(fn:local-name(.), $elem-name, "i")]

关于marklogic - 仅通过传递部分节点名称获取子节点的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52178365/

相关文章:

java - 使用 java api 对文档元数据执行范围搜索

marklogic - Marklogic 任务服务器中队列大小增加的影响

search - 具有复杂逻辑或替代方案的自定义约束

marklogic - XML 标签值的分面

javascript - 空 JSON 数组的 MarkLogic Javascript 查询

xml - MarkLogic:使用 cts:search 查找没有文本的元素

marklogic - 如何找出导致集群重启的错误查询?

json - 其余扩展不会转换 json

javascript - 如何在 MarkLogic 10 的资源扩展中导入 JavaScript 模块

带约束的 MarkLogic 搜索返回错误结果