Xml xsl:sort不能与xsl:choose或if一起使用
我在这个XSL问题上疯了 问题是,我想在选择了某种形式的报纸之后对其进行分类。如果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]">
$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,则排序键都是相同的,因此排序没有效果