私がはまった穴:XSL編

定義したはずの変数が使えない!

親のテンプレート内で定義した変数を子のテンプレートに渡すには xsl:with-param で変数の引き渡しを行う必要があるらしい。引数を付けてサブルーチンを呼ぶような感じかな。
すぐ隣にあるのが見えてるやろ!と言いたくなるのは私ぐらいのものでしょうか(^^;)。プログラム言語一つも知らずにHTMLからXML+XSLと言うのはちょっときついかも。

変数の引き渡しができない!

何故か1ヶ所だけwith-paramで変数の引き渡しができず、四苦八苦。うまく行っているところと比較し、違うのは select="document('/menu/main.xml')" でファイルの後にノードが付いているか付いていないかだけ。付けるとうまく引き渡しができました。

<xsl:param name="request.uri"/>が取得できない!

入れ場所を間違えておりました。こちらはグローバル変数でないと駄目なよう。テンプレートの下にあってもエラーが出なかったので、同じ名前のローカル変数になっていたのかも。XPSの$rが非常にありがたかったので、XPSからXSLへ移行に消極的でしたが、無事URIが取得でき感激。こんな便利なプラグイン作ってくれたKipさんありがとう!

スラッシュが含まれていたら…

絶対パスを相対パスに変換しようと、上記のrequest.uriで取得した現在のページのURLにスラッシュが含まれていれば、その数だけ ../ でルートまで上ろうとしたら、スラッシュが含まれているかどうかの判別がうまくいかない。これも検索すれば結構お連れがいらっしゃいました。原因は / が文字ではなくルートノードとして解釈されるため。 <xsl:param name="char" select="'/'"/>で文字変数に置き換える案をもらって解決。

ネームスペース…

別に理解しなくてもXMLって使えますよねぇと思っていたら、RSS1.0を読もうとして陥没。でもWebで検索すれば似たようなお連れ(ネームスペース知らずにRSSを読もうとしている人)がいらっしゃる。いろんなバージョンのRSSを同じXSLで処理するには名前空間に無関係なマッチングが役に立ちました。

リンク先を変えたとたんにサーバーエラー

スタイルシートをいじった覚えはない、リンク先アドレスを変更しただけ。その証拠に元のURLに戻すとエラーが消える。犯人は変更後のURLに含まれていた & でした。&amp; に変更するとうまくいきました。その前に&anp; を試してうまくいかなかったため、しばらくはまりこんだのでした(T_T)。

SELECTED を入れたいんやけど…

こんなん入れたらエラーでそうやけどと思ったら、やっぱり、しっかり、エラーが出る。XHTML+SELECTED で検索して SELECTED="SELECTED" を発見。ダッセェ〜と言いたくなるけど SELECTED="1" や SELECTED="yes" や SELECTED="on" よりもインパクトがあって覚えやすいかも(^^;)。同じパターンで CHECKED や NOWRAP もいけるよう。


お世話になっているメーリングリスト

買った本

お世話になっているサイト


●戻る●