質問: xsltの動作 いつもお世話になります。 以下のxsltの処理の動き方を教えてください。 どうして3の結果xmlになるのかわかりません。おそらくposition()の取り方がわかっていないのかなって思っています。 自分としては <色>白色> <色>yellow色> <色>赤色> <色>blue色> <色>黒色> になるんじゃないのかなって思ってしまうのですが・・・。 (1)データ 1300 white白 yellow黄色 red赤 blue青 black黒 (2)xslt <色>色> <色>色> (3)結果xml <色>white色> <色>黄色色> <色>red色> <色>青色> <色>black色>
回答: まず三つ関係ないところを指摘しておく。 1. color要素終了タグが悉く抜けている 2. for-each要素開始タグから名前空間接頭辞が抜け落ちている。 3. 開始タグに対する終了タグから/が抜け落ちている。 さて,本題に入ろうか。 過去の質問を見ていると受けようとしている試験はそれなりのもののようだし,回答履歴見てもvb.netやc#やらの回答をしている以上, 「zero origin」って聞いたことあるよね? 配列の添え字みたいに0から始まるの。1個の要素からなる配列の最大添え字は0 逆にcountとかlengthみたいなのは 1個あったら1が返ってくるよね? position関数がどっちなのか,前回でもそうだったけど【困った時は規格を調べる】のが一番だ。 http://www.w3.org/tr/xpath#section-node-set-functions >the position function returns a number equal to the context position from the expression evaluation context. position関数はexpressionが評価されたコンテキストにおける位置を返す。 でcontext positionってなによ、ってリンク張ってあるからたどってみると http://www.w3.org/tr/xpath#dt-context-position >a pair of non-zero positive integers (the context position and the context size) 【非ゼロの】整数の組み合わせ(context positionとcontext size) って書いてあるからpositionは1から始まる。 white白 は position = 1 なので, を適用するから whiteが出てくるわけ 参考: http://www.w3.org/tr/xslt#for-each