Xquery 如何从MarkLogic中的文档URI获取文档目录?
我有一个不同目录的URI列表。这是一种从MarkLogic中的URI获取所有不同目录的方法吗Xquery 如何从MarkLogic中的文档URI获取文档目录?,xquery,marklogic,Xquery,Marklogic,我有一个不同目录的URI列表。这是一种从MarkLogic中的URI获取所有不同目录的方法吗 xdmp:directory用于不同的目的 Example- let $uri := "/test/abc/somepath/abc.xml" Output should be- "/test/abc/somepath/" 有什么建议吗?这没有内置函数,但您可以通过几种不同的方式从URI解析目录值,具体取决于您希望的严格程度 fn:string-join(fn:tokenize('/test/abc
xdmp:directory
用于不同的目的
Example-
let $uri := "/test/abc/somepath/abc.xml"
Output should be- "/test/abc/somepath/"
有什么建议吗?这没有内置函数,但您可以通过几种不同的方式从URI解析目录值,具体取决于您希望的严格程度
fn:string-join(fn:tokenize('/test/abc/somepath/abc.xml', '/')[1 to last()-1], '/')||'/'
或者如果您只想在字符串以/
开头时进行匹配:
replace('/test/abc/somepath/abc.xml', '^((/[^/]+)*/)[^/]*$', '$1')
这没有内置函数,但您可以通过几种不同的方式从URI解析出目录值,具体取决于您希望的严格程度
fn:string-join(fn:tokenize('/test/abc/somepath/abc.xml', '/')[1 to last()-1], '/')||'/'
或者如果您只想在字符串以/
开头时进行匹配:
replace('/test/abc/somepath/abc.xml', '^((/[^/]+)*/)[^/]*$', '$1')
有一个实用程序函数可以执行此操作:
import module namespace util="http://marklogic.com/xdmp/utilities" at "/MarkLogic/utilities.xqy";
util:basepath("/test/abc/somepath/abc.xml")
它使用了
fn:replace
加上一点关于边缘情况的逻辑。有一个实用功能可以实现这一点:
import module namespace util="http://marklogic.com/xdmp/utilities" at "/MarkLogic/utilities.xqy";
util:basepath("/test/abc/somepath/abc.xml")
它使用了
fn:replace
加上一些围绕边缘案例的逻辑。秘密未记录函数;)@姆霍尔斯特奇——谢谢你。这有助于:)秘密未记录函数;)@姆霍尔斯特奇——谢谢你。这很有帮助:)@wst——非常感谢。这对我来说是有道理的。我使用了mholstege
@wst建议的inbuildutil:basepath
——非常感谢。这对我来说是有道理的。我使用了mholstege
所建议的inbuildutil:basepath
。