我现在有一个文件的完整路径作为字符串,如:
"/db/Liebherr/Content_Repository/Techpubs/Topics/HyraulicPowerDistribution/Released/TRN_282C_HYD_MOD_1_Drive_Shaft_Rev000.xml"
但是,现在我只需要取出文件夹路径,所以它将是上面的字符串,没有最后一个反斜杠内容,如:
"/db/Liebherr/Content_Repository/Techpubs/Topics/HyraulicPowerDistribution/Released/"
但似乎xQuery中的substring()函数只有substring(string,start,len)或substring(string,start),我试图找出一种方法来指定反斜杠的最后一次出现,但是没有运气。
专家能帮忙吗?谢谢!
答案 0 :(得分:2)
尝试使用tokenize()函数(将字符串拆分为其组成部分),然后使用除最后一部分之外的所有内容重新组装它。
let $full-path := "/db/Liebherr/Content_Repository/Techpubs/Topics/HyraulicPowerDistribution/Released/TRN_282C_HYD_MOD_1_Drive_Shaft_Rev000.xml",
$segments := tokenize($full-path,"/")[position() ne last()]
return
concat(string-join($segments,'/'),'/')
有关这些功能的更多详细信息,请查看其参考页面:
答案 1 :(得分:2)
fn:replace可以使用正则表达式完成工作:
replace("/db/Liebherr/Content_Repository/Techpubs/Topics/HyraulicPowerDistribution/Released/TRN_282C_HYD_MOD_1_Drive_Shaft_Rev000.xml",
"[^/]+$",
"")
答案 2 :(得分:1)
以下代码标记化,删除最后一个标记,用空字符串替换它,然后重新加入。
string-join(
(
tokenize(
"/db/Liebherr/Content_Repository/Techpubs/Topics/HyraulicPowerDistribution/Released/TRN_282C_HYD_MOD_1_Drive_Shaft_Rev000.xml",
"/"
)[position() ne last()],
""
),
"/"
)
似乎在try.zorba-xquery.com上返回了所需的结果。这有帮助吗?
答案 3 :(得分:1)
即使使用单个XPath 2.0(XQuery子集)表达式也可以这样做:
substring($fullPath,
1,
string-length($fullPath) - string-length(tokenize($fullPath, '/')[last()])
)
其中$fullPath
应替换为实际字符串,例如:
"/db/Liebherr/Content_Repository/Techpubs/Topics/HyraulicPowerDistribution/Released/TRN_282C_HYD_MOD_1_Drive_Shaft_Rev000.xml"