【问题标题】:Get XPath of Child node only by passing partial node name仅通过传递部分节点名称获取子节点的 XPath
【发布时间】:2018-09-05 06:23:06
【问题描述】:

我在 MarkLogic 中存储了以下 XML,

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

我的要求是只获取子节点的 xpath,如果我通过 test(partial node name) 到我的 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(.)

请指导我实现我的要求。

【问题讨论】:

    标签: marklogic marklogic-8


    【解决方案1】:

    我不确定您是在尝试匹配某个深度还是只是叶节点。如果只想获取叶子节点,可以加一个谓词检查有没有子元素

    [fn:not(./*)]
    

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

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

    【讨论】:

    • @Shiv 您能否将此问题标记为已回答,好吗?这让人们知道你还没有寻求帮助(并给予詹姆斯一些荣誉)。
    • @Dave Cassel...是的...我已经将此问题标记为已回答。
    • 谢谢@James Kerr.. 您的解决方案符合我的预期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2015-03-30
    相关资源
    最近更新 更多