XSLT for-each でカレントドキュメントが変わる
<xsl:for-each select="$document('some.xml')">
<xsl:apply-template select="/root/element"/>
</xsl:for-each>
これが期待通りいかない。for-each の中でメインのソースドキュメントて処理できないのかしら。あー何かもうわけわからん……カレントノードが $document('some.xml') になるのは書いてあるけど、/ はメインのドキュメントのルートノードじゃないのかよと……どうやって書けばいいんだ W3C ちゃん。
なんかアレだなぁ……絶不調だ。普段はやる気でないし、やる気でたら意味わからんことばっかだ。何もできないときは何もしたくないんだけど、夏休み中にやっちまいたいんだよなぁ。あー高校生活があと20年ぐらいあればいいと思うよ。ただしインチキ臭くないないクラスメイトとマトモな教師がいる高校生活が。
哀さんの書き込みと IRC での発言によってもうちょい賢くなった気がする!
上の文で カレントノードが
と書いているけど、変わるのはカレントノードではなくコンテキストノードっぽい。カレントノード (current()) はテンプレートにマッチしたやつっぽい。XSLT 仕様書の for-each には $document('some.xml') になるこのテンプレートは、選択したノードをカレントノードとして使用し
と書いてあって、これを俺は勘違いしていたくさい。テンプレートのインスタンス化するとき initialize に投げられるのがそのテンプレートのカレントノードとなり、その後はたぶんカレントノードは変化しないんだ。
関連エントリー
- XSLT と XPath の理解 とりあえずカレントノードとコンテキストノード。 カレントノード = current() で、コンテキストノード = self::node()...
- XPath の紛らわしさ XPath は XPath という名前だけでも誤解を招く。Path というだけにディレクトリパスとかを連想する。まぁ、ディレクトリパスとは類...
- 結果ツリーフラグメント 注意 これは間違ってるかもしれない。実際に実装を使って確かめたわけじゃない。今はめんどくさくて確かめたくないので覚書的なもの。 変数バインド...
- Ruby で XML をまじめに使いたい 標準添付の rexml は軽くやるぐらいなら十分だけど、名前空間関係がちょっと怪しい。今時 XML を真面目に使えないとなるとやばい。 RA...
- preceding sabなんとか XSLT 処理系で preceding がようわからない。いや、仕様通りかもしれないけど、それも意味がわからない。 注: 一...