for-each ループを使用して XSL ノード セット変数を作成したいと考えています。構築されたノード セットは、コピーではなく元の (選択された) ノード セットであることが重要です。
これは私の問題の非常に単純化されたバージョンです(もちろん選択で解決できますが、それは問題のポイントではありません)。<name> ノードを使用して、構築されたノード セット変数が実際に元のツリーにあり、コピーではないことをテストしました。
XSL バージョン 1.0、プロセッサは msxsl です。
非動作 XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:variable name="entries">
<xsl:for-each select="//entry">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="entryNodes" select="msxsl:node-set($entries)"/>
<xsl:for-each select="$entryNodes">
<xsl:value-of select="/root/name"/>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XML 入力:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name>X</name>
<entry>1</entry>
<entry>2</entry>
</root>
必要な出力:
X1X2
実際の出力:
12
もちろん、(または) 問題はコピーです。しかし、私はこれを回避する方法を見つけることができません。