Я пытаюсь обработать XML-файл, который имеет несколько различных групп состояний, например
<root>
<childgroup>16</childgroup>
<setstate>init</setstate>
<child1>...</child1>
<child2>...</child2>
<setstate>process<setstate>
<child2>...</child2>
<child3>...</child3>
.....
<childgroup>17</childgroup>
...
Что мне нужно, так это получить что-то вроде
</p>
<pre><code><childgroup no="16">
<state statename="init">
<child1>...</child1>
<child2>...</child2>
</state>
<state statename="process">
<child2>...</child2>
<child3>...</child3>
</state>
</childgroup>
<childgroup no="17">
...
Я сделал простую часть, которая состоит в добавлении атрибута "chgrpno" и атрибута stateid ко всем дочерним элементам (он копирует все элементы, кроме дочерней группы и состояния, добавляя атрибут к этим двум.
<xsl:template match="/">
<xsl:apply-templates mode="numb"/>
</xsl:template>
Это работает, и в результате все дочерние элементы имеют атрибуты, чтобы я мог перегруппировать их в следующем проходе, а состояния имеют номера, чтобы позже я мог сделать то же самое. Но пытаюсь последовать примеру М.Кея с «временными документами», когда я пытаюсь сделать
<xsl:variable name="nmb">
<xsl:apply-templates mode="numb"/>
</xsl:variable>
<xsl:template match="/">
<xsl:copy-of select="$nmb"/>
</xsl:template>
тогда он просто возвращает мне оригинал, и все изменения, которые я сделал в первом проходе, пропали. Так что я тут делаю не так?
Я использую XSLT 1.0, а не XSLT 2.0 явно.
(редактировать: конечно, я назвал переменную, забыл скопировать ее здесь).