webmasterです。
動作確認致しました。問題なく動作しますが、トラブル回避の為、少し修正を
加えました。
コード: 全て選択
<xsl:if test="substring( file1/@org, string-length( file1/@org ) - 2, 3 )='pdf'">
PDFファイル
</xsl:if>
<xsl:if test="substring( file1/@org, string-length( file1/@org ) - 2, 3 )='txt'">
TEXTファイル
</xsl:if>
file1を直接使うのではなく、file1/@org のように、元ファイル名を使うように
しました。この方が早く処理されるのではないかと思います。
このサンプルはXSLTに慣れていないと「ちんぷんかんぷん」だと思いますので、
file1の部分と'pdf'や'txt'などの拡張子との比較の部分などを変えてそのまま
使って頂ければOKかと思います。
いちおう、このサンプルについて簡単にご説明します。
まず、substring関数は、指定した文字列のn番目の文字からk文字分
を抜き出す関数です。
substring( 文字列, n, k ) の書式になります。
これを使って、「test01.pdf」というファイル名から「pdf」の部分を抜き出したい
とします。考え方としては「後ろから3文字分を取り出す」ということになるのですが、
substring関数は「n文字目から3文字分」のようにしか指定できないので、
「ファイル名全体の文字数 - 3 + 1」を抜き出す開始点とします。+1しているのは、
最後の文字から3つ前にズラすと「p」ではなく「.」まで戻ってしまう為です。
"test01.pdf"のファイル名全体の文字数は10文字です。10 - 3 + 1 = 8で、
substring( 'test01.pdf', 8, 3 ) とすれば、'pdf'の文字が取得できることに
なります。
次に、ファイル名全体の文字数を取得する方法を考えます。
これは、ズバリ string-length関数を使えば取得できます。
file1/@org に 'test01.pdf'というファイル名が入っているとして、
string-length( file1/@org ) と書けば、"10"が返ります。
以上で道具が揃ったので、全部組み合わせて、
substring( file1/@org, string-length( file1/@org ) - 3 + 1, 3 )
で、拡張子の部分を取得できるようになりました。
「- 3 + 1 」の部分が冗長なので、「- 2」としてしまいます。
substring( file1/@org, string-length( file1/@org ) - 2, 3 )
そして、この結果が'pdf'なのか'txt'なのか、などを比較すればOKです。
比較はいつものようにxsl:if を使います。
<xsl:if test="substring( file1/@org, string-length( file1/@org ) - 2, 3 )='pdf'">
これで、拡張子が'pdf'の場合はこのif要素が実行されるようになります。
ご不明な点などありましたらどんな些細な点でもお気軽にお寄せ下さい。