再帰しないための解決策を思いついて、やってみたらうまくできたので。
XSLT標準の手法だけで、ループを実現させちゃう技だ。
#昔やった覚えがあるけど、忘れてた・・・
通常、XSLT内で、変数としてXMLデータを定義しても、ノードセットとしてみなされない場合、XMLデータとしては使えない。
ノードセット化するのは、msxsl:node-setでキャストしてやればいいんだけど、msxslを解釈するやつ=MSXMLでしか処理できない恐れがある。
でも、XSLTXMLの場合、自身(XML)を自身(XSLT)で処理するのだから、自身(XSLT)に書かれたXMLデータには直接(XML)アクセスできるはずだ。
っちゅうわけでできたのはこちら。
#ちょっと乱暴だけど。
再帰もいいけど、ループもね。
再帰するとスタック消費するんだよね。
回数不明な再帰はスタックオーバーフローを引き起こす恐れが恐怖。
(追記)
乱暴さを緩和するには、//path を //xsl:variable[@name='data']/path に変えるとよい。
#変数名を指定できるため、複数の変数を扱えるようになる。
コメントしちゃいなよ