「名前が違う」だけではアレなので、結果ツリーフラグメント(RTF)だと何が不味いのか、について捕捉。
本来RTFに対して許されている演算は、文字列に対して許されている演算のみなので、ノード集合を値に取るxsl:for-eachのselect属性にRTFを放り投げると、まともなプロセッサ(Saxonとか)はエラーを吐く。
しかし、PHP4に搭載されているSablotronは(例によって)RTFをまるでノード集合を扱ってるかのように処理してしまい、エラーは吐かない。困ったプロセッサだ。
ちなみに、いくつかのプロセッサ(Xalanとか)ではXSLT1.0でも結果ツリーフラグメントをノード集合として扱えるような特別な方法が準備されている(バグではないので、明示的に指定する必要がある)。また、XSLT2.0ではRTFに対する制限が取り除かれる予定。
なお、前に1度書いたが、xsl:paramのselect属性で(内容ではない!)ノード集合を指定した場合は、RTFではなくて、ノード集合として扱われるので注意が必要。