parameters=
に渡す値はすべて自分でクオートしとこう。
libxslt はもともとパラメータの値に XPath そのまんま書けるんだけど、なぜか ruby-xslt の parameters=
ではクオートして必ず文字列で渡す。しかしながら、なんかこのクオートの実装が狂ってて、自分でクオート付け足してる癖に Invalid expression とか言い出してくれちゃう。やれやれだぜ!
正確に言うとクオートを付与する段階で、与えた文字列を中途半端に破壊的に変更するらしく、クオーテーションがかたっぽだけ付く。セッションとかで保存させながらのコードでもうハマったハマった。dup
してどうにかしたけど、自分でクオートして明示的に文字列にしたほうがよさげ。
ソースは読んでないので間違っているかも。あくまで挙動からの推測
- トップ
- xslt
- ruby-xslt の parameters=
- トップ
- ruby
- ruby-xslt の parameters=
俺はもうテンプレートが XSLT じゃない日記システムないし CMS ツールは使えない人間になってしまったのだけど、なんで XSLT を使うかを考えてみた。
- アプリケーション間で使いまわししやすい。(仕様化されているので)
- ホスト言語をあまり制限しない。(仕様化され、ライブラリが存在するので)
- not well-formed にはまずならない。(XML プロセサが処理をするので)
- インデントがまとも。(XML プロセサが処理をするので)
- (タグなどに関しては) sanitize を言わなくてすむ。 (XML プロセサが処理をするので)
- やろうと思えば XPath 関数を増やせるので、拡張性が高い。
- パズルちっくで (書いていて) 楽しい。(裏を返せば読みにくいのだけど)
XPath の話も混ざってますけど、どうせ一緒に使うからいいよね。
メリットを書くならデメリットも書くべきだけど、そんなに思いつかない。
- とにかく元が XML じゃないと話にならない。
- ちょっと難しいことやると難読になる。
- XPath 1.0 が貧弱。
- 最初は template がどんな意味を持つのか理解できない。XPath が地味に難しい。
- 難読まで行かなくとも、読むのが面倒くさい。(上から順番に実行されるわけではないから)
思いつかないとかいいつつ結構あるね。
一番重要なのは、アプリケーション間で使いまわしやすいことだと思う。共通のテンプレートを作っておけば、それを include したりして、それぞれ別のシステムから利用できる。このサイトはヘッダとかフッタとかナヴィゲーションとかは XSLT の1ファイルにまとめて書いてある。だから CSS のスタイルを作っても適用するのは全く面倒くさくない。ようは別々になってるとめんどいのよ。面倒くささ解消のために標準化標準化
- トップ
- xslt
- テンプレートに XSLT スタイルシートを使う利点
- トップ
- web
- テンプレートに XSLT スタイルシートを使う利点
- トップ
- cms
- テンプレートに XSLT スタイルシートを使う利点
- トップ
- blog
- テンプレートに XSLT スタイルシートを使う利点
- last(), number
- position(), number
- count(node-set), number
- id(obj), number
- local-name(node-set = self::node()), string
- namespace-uri(node-set = self::node()), string
- name(node-set = self::node()), string
- string(object = self::node()), string
- concat(string, string, string*), string
- starts-with(string, string), boolean
- contains(string, string), boolean
- substring-before(string, string), string
- substring-after(string, string), string
- substring(string, number, number = string-length), string
- string-length(string = string(self::node())), number
- normalize-space(string = string(self::node())), string
- translate(string, string, string), string
- boolean(object), boolean
- not(boolean), boolean
- true(), boolean
- false(), boolean
- lang(string), boolean
- number(object = self::node()), number
- sum(node-set), number
- floor(number), number
- ceiling(number), number
- round(number), number
- child 子
- parent (..) 親
- attribute (@) 属性
- descendant-or-self (//)
- self (.)
- descendant 子孫
- ancestor 祖先
- following-sibling 後兄弟
- preceding-sibling 前兄弟
- following 後
- preceding 前
- namespace
- ancestor-or-self
- comment()
- text()
- processing-instruction([target])
- node()
- .
- self::node()
- ..
- parent::node()
- //
- descendant-or-self::node()
- @
- attribute::
@ 以外は軸とノードテストを合わせた省略形
http://lowreal.net/logs/2006/01/03/1#content
- トップ
- xslt
- XPath1.0 いろいろ一覧