我想在Marklogic服务器中获取上传文件的文件扩展名。我知道如何获取文件名。但是这给了文件名和扩展名new.txt。但我只希望扩展名不是完整的文件名。我怎样才能获得文件扩展名?
答案 0 :(得分:2)
有很多方法可以从文件名中获取文件扩展名。例如,您可以使用functx:substring-after-last($filename, '.')
或其他方法(fn:substring-after)
获取点后的子字符串。请参阅:xqueryfunctions.com
P.S。 fn:tokenize($filename, '\.')[fn:last()]
答案 1 :(得分:1)
我经常使用以下替换:
fn:replace("c:\a\b\c.d.e.txt", '^(.*\.)?([^\.]+)$', '$2')
但正如Andrew所建议的,使用functx也是一个好主意。 functx库的副本作为后一版MarkLogic的一部分进行分发。只需添加以下导入即可使用它们:
import module namespace functx = "http://www.functx.com" at "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy";
HTH!
答案 2 :(得分:0)
只是为了变化,另一个产生扩展名的表达式:):
reversed-string(substring-before(reversed-string($filePath), '.'))
其中reversed-string($s)
可以定义为:
codepoints-to-string(reverse(string-to-code-points($s)))
所以替换的整个表达式是:
codepoints-to-string(
reverse(
string-to-codepoints(
substring-before(codepoints-to-string(reverse(string-to-codepoints($filePath))),
'.')
)
)
)