• ベストアンサー

XSLTでの正規表現判定

XSLTで正規表現による判定は可能でしょうか? XML内のwidthの数値を読み取り、 幅を広げることはできるのですが、 widthの指定が数値以外の場合に 表示されません。 現状では数値指定がない場合には デフォルトで200を指定しているのですが、 文字列が入ってきた場合にも 無視して200としたいのです。 <xsl:when test="width=\\d"> だとダメでした。 いい方法はありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

number 関数を使うと文字列を数値に変換できます。 その時に、数値に変換できない値を指定すると、NaN(非数値)を返しますので、この関数を使って非数値(数値以外)を判定することができると思います。 例えば、 <xsl:when test="'NaN'=string(number(width))"> 数値ではない<br /> 等とできます。 (数値の場合の処理は<xsl:otherwise>で) 注意として、string(NaN)がの表現が'NaN'でない場合も考えられるため 'NaN'= ではなく string(number('NaN'))= の方がいいかもしれません NaN を直接XSLTで表現できればいいのですが、それは知りません。 MSのマニュアルなんかを読むとエンティティと書いてあるので、なんらかの表現があるのかもしれませんが・

その他の回答 (1)

noname#20377
noname#20377
回答No.1

自信なし。識者を待つ方が賢明だが一応 http://www.antenna.co.jp/XSL-FO/support/v2qa/QA-conformance.html#QA2003040402 >XSLTとXPathの仕様では正規表現が使えません。したがって、通常の状態では正規表現を使った文字列操作は不可能です。 しかし、XSLTを拡張することができます。これは、XSLTプロセッサに依存しますが、 XSL Formatterでは、XSLTプロセッサを選択できるので、問題は解決できるでしょう。 ひとつは、XSLTスタイルシートでJavaScriptを使うことです。 JavaScriptで正規表現を使って文字列操作が可能です。使い方は、使用しているXSLTプロセッサの仕様を調べてください。 他に、JavaScript以外にもXSLTプロセッサによる拡張が実装されている場合がありますので、 ご使用のXSLTプロセッサの仕様を調べてください。 (このツールはXSLT 1.0を前提にしているっぽい) 一方でこんな情報も見られます(英語!) http://www.xml.com/pub/a/2003/06/04/tr.html ただまぁXSLT 2.0はまだW3C Candidate Recommendation 8 June 2006なようですが http://www.w3.org/TR/xslt20/

関連するQ&A