我对这个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>
答案 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'
为假,则排序键都是相同的,因此排序无效。