これは以前から気になっていたのですが、どうやって回避したか思い出せません。EXSLT は、XML の文字列をノード設定するときに属性を削除しているようです。
これは不自然な例です (簡潔にするために XSLT スタイルシート タグを削除しましたが、EXSLT の共通ライブラリが名前空間に読み込まれていますexsl
)。
XML
<xml>
<node />
<node />
<node />
</xml>
XSLT:
<xsl:template match="/">
<xsl:variable name='nodeset' select='exsl:node-set(xml/node)' />
<xsl:copy-of select='$nodeset' />
</xsl:template>
<xsl:template match='node'><node foo='bar' /></xsl:template>
結果
<node/><node/><node/>
デモ プレイグラウンド(出力ソースを参照)