Я пытаюсь придумать XSLT, который будет сортировать элементы в XML ниже, сохраняя положение других элементов.
<TransactionSet TransactionSet_Id="12345">
<ATransaction ATransaction_Id="54321">
<DoNotSort_1 DoNotSort_1_Id="90678">
<SomeData/>
</DoNotSort_1>
<DoNotSort_2 DoNotSort_2_Id="46456">
<OtherData/>
</DoNotSort_2>
<DoNotSort_3 DoNotSort_3_Id="33333"/>
<SortIt SortIt_Id="11">
<TheOrder>1</TheOrder>
<MoreData/>
</SortIt>
<SortIt SortIt_Id="55">
<TheOrder>5</TheOrder>
<MoreData/>
</SortIt>
<SortIt SortIt_Id="22">
<TheOrder>2</TheOrder>
<MoreData/>
</SortIt>
<SortIt SortIt_Id="44">
<TheOrder>4</TheOrder>
<MoreData/>
</SortIt>
<DoNotSort_4 DoNotSort_4_Id="789456">
<EvenMoreData/>
</DoNotSort_4>
<DoNotSort_4 DoNotSort_4_Id="899567">
<EvenMoreData/>
</DoNotSort_4>
<DoNotSort_5 DoNotSort_5_Id="55555">
<EvenMoreData/>
</DoNotSort_5>
</ATransaction>
XSLT I применяется ниже:
<xsl:stylesheet
version="1.0"
xmlns="http://www.oneshield.com/DragonSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="ATransaction">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates>
<xsl:sort select= "TheOrder" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Результат XML Я получаю ниже:
<TransactionSet TransactionSet_Id="12345">
<ATransaction ATransaction_Id="54321">
<DoNotSort_1 DoNotSort_1_Id="90678">
<SomeData/>
</DoNotSort_1>
<DoNotSort_2 DoNotSort_2_Id="46456">
<OtherData/>
</DoNotSort_2>
<DoNotSort_3 DoNotSort_3_Id="33333"/>
<DoNotSort_4 DoNotSort_4_Id="789456">
<EvenMoreData/>
</DoNotSort_4>
<DoNotSort_4 DoNotSort_4_Id="899567">
<EvenMoreData/>
</DoNotSort_4>
<DoNotSort_5 DoNotSort_5_Id="55555">
<EvenMoreData/>
</DoNotSort_5>
<SortIt SortIt_Id="11">
<TheOrder>1</TheOrder>
<MoreData/>
</SortIt>
<SortIt SortIt_Id="22">
<TheOrder>2</TheOrder>
<MoreData/>
</SortIt>
<SortIt SortIt_Id="44">
<TheOrder>4</TheOrder>
<MoreData/>
</SortIt>
<SortIt SortIt_Id="55">
<TheOrder>5</TheOrder>
<MoreData/>
</SortIt>
</ATransaction>
</TransactionSet>
Моя проблема: даже если элементы отсортированы, элементы и были перемещены над элементами. Я хочу, чтобы они были на своем месте, под элементами.
Любая помощь в этом будет принята с благодарностью. Заранее спасибо.