0

Marklogicサーバーにアップロードされたファイルのファイル拡張子を取得したい。ファイル名の取得方法を知っています。しかし、それはファイル名とnew.txtのような拡張子を与えます。しかし、完全なファイル名ではなく、拡張子だけが必要です。ファイル拡張子だけを取得するにはどうすればよいですか?

4

3 に答える 3

2

ファイル名からファイル拡張子を取得する方法はたくさんあります。たとえば、ドットの後に部分文字列を取得functx:substring-after-last($filename, '.')する方法やその他の方法を使用できます。(fn:substring-after)参照してください:xqueryfunctions.com

PSfn:tokenize($filename, '\.')[fn:last()]

于 2012-07-02T09:05:30.877 に答える
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!

于 2012-07-02T11:09:01.047 に答える
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))),
                               '.')
                                   )
                     )
                              )
于 2012-07-02T13:17:08.903 に答える