У меня есть требование сортировать записи на основе поля (аккаунта), только если другое поле (depositvalue) не пустое. Я могу сделать это, но мой текущий xslt удаляет несопоставленные узлы в шаблонах применения. Как всегда можно оставить все остальное нетронутым в этом случае. Сортируемая запись (DirectDeposit) может не всегда присутствовать для некоторых сотрудников.
Я уже достиг прогресса в сортировке.
XSLT:
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Employee">
<Employee>
<xsl:apply-templates select="DirectDeposit[not(depositvalue = '')]" >
<xsl:sort select="account"/>
</xsl:apply-templates>
<xsl:apply-templates select="DirectDeposit[depositvalue = '']"/>
</Employee>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
фактический результат: (заголовок сотрудника пропал)
<?xml version="1.0"?>
<Hire>
<Employee>
<DirectDeposit>
<action>DirectDeposit</action>
<created_by/>
<created_on_timestamp>2018-07-13T19:46:58.000Z</created_on_timestamp>
<date_of_birth>1985-04-09</date_of_birth>
<account>2</account>
<depositvalue>200</depositvalue>
</DirectDeposit>
<DirectDeposit>
<action>DirectDeposit</action>
<created_by/>
<created_on_timestamp>2018-07-13T19:46:58.000Z</created_on_timestamp>
<date_of_birth>1985-04-09</date_of_birth>
<account>3</account>
<depositvalue>100</depositvalue>
</DirectDeposit>
<DirectDeposit>
<action>DirectDeposit</action>
<created_by/>
<created_on_timestamp>2018-07-13T19:46:58.000Z</created_on_timestamp>
<date_of_birth>1985-04-09</date_of_birth>
<account>1</account>
<depositvalue/>
</DirectDeposit>
</Employee>
<Employee/>
</Hire>
Ожидается:
<?xml version="1.0"?>
<Hire>
<Employee>
<Header>
<action/>
<created_by/>
<created_on_timestamp>2018-07-
13T19:46:58.000Z</created_on_timestamp>
<date_of_birth>1985-04-09</date_of_birth>
<AdditionalElements/>
</Header>
<DirectDeposit>
<action>DirectDeposit</action>
<created_by/>
<created_on_timestamp>2018-07-
13T19:46:58.000Z</created_on_timestamp>
<date_of_birth>1985-04-09</date_of_birth>
<account>2</account>
<depositvalue>200</depositvalue>
</DirectDeposit>
<DirectDeposit>
<action>DirectDeposit</action>
<created_by/>
<created_on_timestamp>2018-07-13T19:46:58.000Z</created_on_timestamp>
<date_of_birth>1985-04-09</date_of_birth>
<account>3</account>
<depositvalue>100</depositvalue>
</DirectDeposit>
<DirectDeposit>
<action>DirectDeposit</action>
<created_by/>
<created_on_timestamp>2018-07-13T19:46:58.000Z</created_on_timestamp>
<date_of_birth>1985-04-09</date_of_birth>
<account>1</account>
<depositvalue/>
</DirectDeposit>
</Employee>
<Employee/>