NULL::something

Login via flickr, はてな, TypeKey.

2004-08-21

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 での発言によってもうちょい賢くなった気がする!

上の文で カレントノードが $document('some.xml') になる と書いているけど、変わるのはカレントノードではなくコンテキストノードっぽい。カレントノード (current()) はテンプレートにマッチしたやつっぽい。XSLT 仕様書の for-each には このテンプレートは、選択したノードをカレントノードとして使用し と書いてあって、これを俺は勘違いしていたくさい。テンプレートのインスタンス化するとき initialize に投げられるのがそのテンプレートのカレントノードとなり、その後はたぶんカレントノードは変化しないんだ。

Inserted at 2004-10-17T15:24:52+09:00

Comments (1)

哀's image
哀 says:
&lt;xsl:for-each select="$document('some.xml')"&gt; &lt;xsl:apply-template select="current()/ancestor::root/element"/&gt;&lt;/xsl:for-each&gt; かな
2004-10-14T10:43:43+09:00

Trackback URI: http://lowreal.net/logs/2004/08/21/1.trackback

NULL

RSS feed meter for http://lowreal.net/logs/latest

Alternates

  1. RSS 1.0
  2. Atom 1.0

Generated with Taglibro

この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。