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

Xml xsl:sort不能与xsl:choose或if一起使用,xml,sorting,xslt,if-statement,xsl-choose,Xml,Sorting,Xslt,If Statement,Xsl Choose,我在这个XSL问题上疯了 问题是,我想在选择了某种形式的报纸之后对其进行分类。如果$sort\u paper='name'并且它应该在name之后排序()。。。但是如果choose或after中存在xsl:sort,则该命令无效。它也不适用于xsl:if 要明确的是,它像现在的代码一样工作,选择工作 <xsl:for-each select="./newspaper[count(. | key('newspaper_key', ./@id)[1]) = 1]">

我在这个XSL问题上疯了

问题是,我想在选择了某种形式的报纸之后对其进行分类。如果
$sort\u paper='name'
并且它应该在name之后排序(
)。。。但是如果choose或after中存在
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>

XSL:SORT应该在这里,但这将导致错误!
你好
如果XSL:SORT出现在这里,也会导致错误!

对不起,坏消息。这是行不通的。唯一可能的解决方案(我现在看到)是将整个
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>

对不起,坏消息。这是行不通的。唯一可能的解决方案(我现在看到)是将整个
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>

这里有一个替代解决方案

<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\u paper='name'
为false,则排序键都是相同的,因此排序没有效果。

这里有一个替代解决方案

<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\u paper='name'
为false,则排序键都是相同的,因此排序没有效果