Рассмотрите возможность использования шаблонного подхода ...
<xsl:template match="/">
<xsl:apply-templates select="ArrayOfMyObject/MyObject" />
</xsl:template>
Затем, чтобы представить ваш xsl:when
тест, соответствующий первому из элементов "IsFinalResult = 'true'", совпадение шаблона будетthis ...
<xsl:template match="MyObject[@IsFinalResult='true'][1]">
(заметьте, я предполагаю, что IsFinalResult
является здесь атрибутом. Если нет, просто удалите префикс @
)
И для представления xsl:otherwise
, иметь шаблон (с более низким приоритетом), который подберет все остальные MyObject
элементы
<xsl:template match="MyObject">
Итак, учитывая следующий XML:
<ArrayOfMyObject>
<MyObject IsFinalResult="false">1</MyObject>
<MyObject IsFinalResult="false">2</MyObject>
<MyObject IsFinalResult="true">3</MyObject>
<MyObject IsFinalResult="false">4</MyObject>
<MyObject IsFinalResult="true">5</MyObject>
<MyObject IsFinalResult="true">6</MyObject>
</ArrayOfMyObject>
Если вы применяетеэто XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="ArrayOfMyObject/MyObject" />
</xsl:template>
<xsl:template match="MyObject[@IsFinalResult='true'][1]">
<When>
<xsl:value-of select="." />
</When>
</xsl:template>
<xsl:template match="MyObject">
<Otherwise>
<xsl:value-of select="." />
</Otherwise>
</xsl:template>
</xsl:stylesheet>
Вывод такой ...
<Otherwise>1</Otherwise>
<Otherwise>2</Otherwise>
<When>3</When>
<Otherwise>4</Otherwise>
<Otherwise>5</Otherwise>
<Otherwise>6</Otherwise>
(Измените соответствие шаблона на <xsl:template match="MyObject[@IsFinalResult='true' and position() = 1]">
, если вы хотите учитывать @IsFinalResult='true'
, если это оченьпервый дочерний элемент).
Обратите внимание, что если вы хотите, чтобы ваш xsl:otherwise
обрабатывал элементы, где IsFinalResult="true"
(после первого), вам просто нужно добавить третий шаблон, чтобы игнорировать другие элементы
<xsl:template match="MyObject[not(@IsFinalResult='true')]" />