Упрощение функции XSLT: объединить сортировку и применить функцию в списке в функции - PullRequest
0 голосов
/ 20 сентября 2018

Моя функция XSLT:

<xsl:function name="cdocfx:getDisplayableDiagnoses">
    <xsl:param name="clinicalDiagnosis"/>
    <xsl:param name="entityIdList"/>

    <!-- sortedDXList contains all the diagnosis in the sorted order based on priority -->
    <xsl:variable name="sortedDXList" as="element()*">
        <xsl:perform-sort select="$clinicalDiagnosis[@is-active='true']">
            <xsl:sort select="cdocfx:getDxPriority(.)" order="ascending"/>
            <xsl:sort select="fn:upper-case(cdocfx:getDxDisplay(.))" order="ascending"/>        
        </xsl:perform-sort>

    </xsl:variable>

    <!-- dxList contains all the diagnosis which are to be displayed in sorted order  -->
    <xsl:variable name="dxList" as="element()*">
        <xsl:for-each select="$sortedDXList">
            <xsl:if test="cdocfx:shouldDisplayDiagnosis(.,$entityIdList)= true()">
                <xsl:copy-of select="."/>
            </xsl:if>
        </xsl:for-each>
    </xsl:variable>

    <xsl:copy-of select="$dxList"/>
</xsl:function>

Здесь я не хочу создавать два списка.
Я скорее хочу создать один список.
Как мне этого добиться?

1 Ответ

0 голосов
/ 20 сентября 2018

Кажется, что вся функция могла бы просто сделать

<xsl:function name="cdocfx:getDisplayableDiagnoses">
        <xsl:param name="clinicalDiagnosis"/>
        <xsl:param name="entityIdList"/>

        <xsl:perform-sort select="$clinicalDiagnosis[@is-active='true' and cdocfx:shouldDisplayDiagnosis(.,$entityIdList)]">
            <xsl:sort select="cdocfx:getDxPriority(.)" order="ascending"/>
            <xsl:sort select="fn:upper-case(cdocfx:getDxDisplay(.))" order="ascending"/>        
        </xsl:perform-sort>

</xsl:function>

, если у вас нет особой причины использовать переменные и делать копии этих элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...