xsl:sort不能与xsl一起使用:choose或if

时间:2013-05-22 15:15:56

标签: xml sorting xslt if-statement xsl-choose

我对这个XSL问题感到很疯狂!

问题是我想在FORM中选择的内容之后对报纸进行排序。如果$sort_newspaper = 'name'并且它应该在名称(<xsl:sort select="./@name"/>)之后排序......但是......如果xsl:sort存在于选择内或之后,则它不起作用。它也不适用于xsl:if

要清楚它的工作方式就像代码一样,选择工作......

    <xsl:for-each select="./newspaper[count(. | key('newspaper_key', ./@id)[1]) = 1]">
            <xsl:sort select="./@name"/> 

            <xsl:choose>
                <xsl:when  test="$sort_newspaper = 'name'">
                    XSL:SORT SHOULD BE HERE BUT THAT WILL RESULT IN ERROR!
                </xsl:when>
                <xsl:otherwise>
                    HALLO
                </xsl:otherwise>
            </xsl:choose>
IF XSL:SORT WOULD BE HERE IT WOULD RESULT IN ERROR TOO!
    </xsl:for-each>

2 个答案:

答案 0 :(得分:1)

抱歉坏消息。这不行。只有可能的解决方案(我现在看到)将整个xsl:for-each放入xsl:when(有或没有排序)。

您的代码示例应该如下所示:

<xsl:variable name="newspaper_group" select="./newspaper[count(. | key('newspaper_key', ./@id)[1]) = 1]" />
<xsl:choose>
    <xsl:when  test="$sort_newspaper = 'name'">
        <xsl:for-each select="$newspaper_group" >
            <xsl:sort select="./@name"/>
            <!-- Sorted stuff -->
        </xsl:for-each>
    </xsl:when>
    <xsl:otherwise>
        <xsl:for-each select="$newspaper_group" >
            <!-- Unsorted stuff -->
        </xsl:for-each>
    </xsl:otherwise>
</xsl:choose>

答案 1 :(得分:1)

这是另一种解决方案

<xsl:variable name="newspaper_group" select="..." />

<xsl:for-each select="$newspaper_group" >
    <xsl:sort select="./@name[$sort_newspaper = 'name']"/>
            <!-- Sorted stuff -->
</xsl:for-each>

这种方法的工作方式是,如果$sort_newspaper = 'name'为假,则排序键都是相同的,因此排序无效。