プロが教える店舗&オフィスのセキュリティ対策術

XSLTで正規表現による判定は可能でしょうか?

XML内のwidthの数値を読み取り、
幅を広げることはできるのですが、
widthの指定が数値以外の場合に
表示されません。

現状では数値指定がない場合には
デフォルトで200を指定しているのですが、
文字列が入ってきた場合にも
無視して200としたいのです。

<xsl:when test="width=\\d">
だとダメでした。

いい方法はありますでしょうか?

A 回答 (2件)

number 関数を使うと文字列を数値に変換できます。


その時に、数値に変換できない値を指定すると、NaN(非数値)を返しますので、この関数を使って非数値(数値以外)を判定することができると思います。
例えば、
<xsl:when test="'NaN'=string(number(width))">
数値ではない<br />
等とできます。
(数値の場合の処理は<xsl:otherwise>で)

注意として、string(NaN)がの表現が'NaN'でない場合も考えられるため
'NaN'=
ではなく
string(number('NaN'))=
の方がいいかもしれません

NaN を直接XSLTで表現できればいいのですが、それは知りません。
MSのマニュアルなんかを読むとエンティティと書いてあるので、なんらかの表現があるのかもしれませんが・
    • good
    • 0

自信なし。

識者を待つ方が賢明だが一応

http://www.antenna.co.jp/XSL-FO/support/v2qa/QA- …

>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/
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!