XSLT

以前自分が書いたXSLTの文書を再利用することになって、中を確認したら、戸惑う記述があった。

	
		
			
		
	

ぱっと見、どういう結果になるのか予想できなかった(笑)


結局のところ、xsl:copyの部分にエレメントのタグがそのままはいって、その中身はxsl:apply-templatesに渡される。


	
		Pon
	

で、fooにマッチすると結果文書にfooエレメントが作られて、bar以下の内容にapply-templatesされる。


何が気持ち悪いかというと、処理対象がテキストノードの場合にはこう書いていいのである。

	
		
	

おかげで、「apply-templatesの結果はいったいどういう順番になるのか」を悩んでしまった。


copyの対象が「エレメントならエレメント」「テキストならテキスト」ということなんだろうが。*1


さらに

	
		
	

だった場合、「xsl:copyは子孫エレメントをコピーしない」ので結果は


のはず。
だったらどうしてapply-templatesには子孫エレメントが渡されるのかもちょっと気持ちの悪いところ。

*1:ちなみに、この記述だと元のエレメントの属性は対象にならない。この辺も気持ちの悪いところ。(attributeは別の軸として扱われるので。エレメントの親子・兄弟関係をxy平面にプロットしているとすると、属性はz軸か。)