(1)つまり、<color>要素の兄弟でループしているという考え方でよいのでしょうか?
OK
(2)
><xsl:apply-templates select="." />で呼ばれるのは、<xsl:template match="color">であると思うのですが、
OK
><xsl:value-of select="jp" />で<jp>要素はよばれるが、
NG
呼ばれるけどjp要素に対して【templateを】適用しろ、とは言って無いし,value-of select自体はテンプレートでもなんでもないよね?
><en>はビルトインテンプレートが呼ばれるのではないのでしょうか??
NG
これがもし,
<xsl:when test="position() mod 2=0">
<xsl:apply-templates />
</xsl:when>
だったら,
http://www.w3.org/TR/xslt#section-Applying-Template-Rules
>In the absence of a select attribute, the xsl:apply-templates instruction processes all of the children of the current node, including text nodes.
select属性がないので全ての子要素に対して該当するテンプレートを探して適用しますがね。
=============
細かいことだけど,俺前回間違ったことを教えているところがあった。
http://www.w3.org/TR/xslt#strip
まず三つ関係ないところを指摘しておく。
1. color要素終了タグが悉く抜けている
2. for-each要素開始タグから名前空間接頭辞が抜け落ちている。
3. 開始タグ<xsl:template name="color">に対する終了タグから/が抜け落ちている。
さて,本題に入ろうか。
過去の質問を見ていると受けようとしている試験はそれなりのもののようだし,回答履歴見ても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から始まる。
<color><en>white</en><jp>白</jp></color>
は
position = 1
なので,
<xsl:otherwise>
<xsl:call-template name="color" />
</xsl:otherwise>
を適用するから
whiteが出てくるわけ
参考:
http://www.w3.org/TR/xslt#for-each
補足
回答ありがとうございます。 (1) <xsl:template match="color"> <色><xsl:value-of select="jp" /></色> </xsl:template> において、、<color><en>yellow</en><jp>黄色</jp></color>がカレントノードとして渡され、<color>→<en>→<jp>とカレントノードが移動していき、その中で<jp>が適合するので黄色が吐き出されるということで良いのでしょうか? ただ、<xsl:call-template name="color" />においては <xsl:template name="color"> <色><xsl:value-of select="en" /></色> <xsl:template> を呼び出してもカレントノードが移動しないが、<color><en>white</en><jp>白</jp></color>において<color>の子要素に<en>があるのでwhiteが吐き出される。 しかし、<xsl:call-template name="color" />に処理が戻っていっても、そっちの方には<en>や<jp>に適合するテンプレート呼び出しとかもないので、他に何かを吐き出すということも無いということでよろしいのでしょうか? (2) 前回間違ったことを教えていたとありますが、リンク先が英語で・・・なんのことやら・・・という感じですが空白文字の削除の仕方について書いてあると思うのですが、何が間違っていたのかも(汗)