Из контекста элемента amounts
:
../preceding-sibling::data[1]
Следующая таблица стилей копирует предыдущий элемент data
в каждый элемент amounts
, оставляя остальную часть документа неизменной:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="amounts">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:copy-of select="../preceding-sibling::data[1]" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
При применении к исходному документу выдает следующий вывод:
<root>
<items>
<data>2</data>
<listElement>
<amounts>
<period_id>1</period_id>
<amount>5</amount>
<data>2</data>
</amounts>
<amounts>
<period_id>2</period_id>
<amount>6</amount>
<data>2</data>
</amounts>
<amounts>
<period_id>3</period_id>
<amount>7</amount>
<data>2</data>
</amounts>
<amounts>
<period_id>8</period_id>
<amount>89</amount>
<data>2</data>
</amounts>
</listElement>
</items>
<items>
<data />
<listElement>
<amounts>
<period_id>4</period_id>
<amount>55</amount>
<data />
</amounts>
<amounts>
<period_id>5</period_id>
<amount>9</amount>
<data />
</amounts>
<amounts>
<period_id>6</period_id>
<amount>20</amount>
<data />
</amounts>
<amounts>
<period_id>7</period_id>
<amount>80</amount>
<data />
</amounts>
</listElement>
</items>
</root>