decendant-or-self軸がNGになっているためdecendant-or-self::node()は駄目だが、同じ意味の省略形「//」なら通る。その他、parent軸もNGらしい。というか、child軸とattribute軸以外は全部駄目。だから「//」が通るのは例外的と考えるべきかも。
XPointerで遊んでいた時には、XPathの関数は全然知らなかったが、XSLTがらみになると重要になってくる。position関数は、コンテキストノードの「位置」を返す。正しくは、カレントノードリスト内のカレントノードの位置です。本を鵜呑みにしてはいけませんな。
本当にそれだけの関数だ
。過剰な期待をした自分が悪いのだけど、親ノードの横の位置くらいは知りたい:
position(..)
もちろんこれは駄目。position関数に引数はない。
XSLTは、フラットな構造に厳しい。
ルートノードとルート要素は違うものだったという罠。
<xsl:template match="/"></xsl:template>
内で(XPathの)count関数が使えないのには驚きだ。ルート要素直下に見出しをズラズラ並べていたのだけど、数えてくれない
。このためだけに階層を一つ増やしてみたのだけど、なんか気持ち悪い。
XMLで内容を記述して、XSLTで構造を定義して、CSSで見栄えを と思っていたけど、XSLTが弱い、というよりそもそも用途が違うっぽいので無理。要素を自由に切り貼りできるようなものではないらしい。ソースのXMLで構造を明示しないと駄目だ。要するに、XMLパーサを意識してXMLを書かねばならない。
要素を自由に切り貼りできるようなものではないらしい。
と書いてしまいましたが、あれは嘘でした。template要素のmode属性、call-template要素をよく知らなかったのが勘違いの原因。