如何在Marklogic Server中获取文件扩展名?

时间:2012-07-02 08:49:46

标签: xquery marklogic

我想在Marklogic服务器中获取上传文件的文件扩展名。我知道如何获取文件名。但是这给了文件名和扩展名new.txt。但我只希望扩展名不是完整的文件名。我怎样才能获得文件扩展名?

3 个答案:

答案 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))),
                               '.')
                                   )
                     )
                              )