Во-первых, в объявлении переменной вам нужно что-то сделать для создания новых узлов. Строго говоря, вы не сортируете их, а просто читаете их в заданном порядке. Я думаю, вам нужно добавить какую-то команду xsl: copy.
<xsl:variable name="deposits">
<xsl:for-each select="/BookingCostings/MultiDeposits">
<xsl:sort select="substring(@DepositDate, 1, 4)" />
<xsl:sort select="substring(@DepositDate, 6, 2)" />
<xsl:sort select="substring(@DepositDate, 9, 2)" />
<xsl:copy-of select=".|@*" />
</xsl:for-each>
</xsl:variable>
Это создает набор узлов, но для доступа к нему вам потребуется использовать функцию расширения в XSLT. Какой из них вы используете, зависит от используемого вами процессора XSLT. В примере, который я собираюсь привести, я использую Microsoft.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" version="1.0">
Затем, чтобы получить доступ к узлам в вашей переменной, вы можете сделать что-то вроде этого
<xsl:value-of select="ms:node-set($deposits)/MultiDeposits[1]/@DepositDate" />
Вот хорошая статья для чтения по наборам узлов
статья Xml.com о наборе узлов