toLowerがない

今週は、XPathの関数で、toLowerがないという問題の回避方法を考えます。
XPathの文字列関数には、toLower や toUpper, equalsIgnoreCases といった、大文字小文字変換が
ありません。

例えば、以下のようなファイル群の中から、大文字、小文字を無視して、test という文字列を
含むものを列挙したいと考えます。

当然ながら、普通に /files/name[ contains(., 'test') ] では無理です。
実は、下に示すようなXPathを使います。

実行結果

解説

XPathの関数でも、あまり使う頻度が高くない transalte 関数ですが、
translate( 文字列, 'TEST', 'test' ) の意味は、下記のようになります。

  1. 文字列中に、'T' という文字があれば、't' に置換する
  2. 文字列中に、'E' という文字があれば、'e' に置換する
  3. 文字列中に、'S' という文字があれば、's' に置換する
  4. 文字列中に、'T' という文字があれば、't' に置換する

つまり、T と E と S と T に限定ですが、toLower を行ったと同じ結果です。
良く見ると、translate( 文字列, 'TES', 'tes' ) で良かったですね...

まとめ

今回は、あまり大した Tipsではありませんでした。
実際のところ、XPath, XSLT系の Tips もそろそろやり終えたかなという気がします。
来週からは、新しいシリーズを始めようかな??