现在我使用xsl:sort
对显示的数据进行排序:
<xsl:sort select="." order="descending" data-type="number" />
我也可以选择替换该行,并按其他值对其进行排序:
<xsl:sort select="@id" />
<xsl:sort select="@sum" order="descending" data-type="number" />
<xsl:sort select="@count" order="descending" data-type="number" />
<xsl:sort select="@minValue" order="descending" data-type="number" />
<xsl:sort select="@maxValue" order="descending" data-type="number" />
所以它的确如下:
<xsl:for-each select="Metrics/Metric">
<xsl:sort select="." order="descending" data-type="number" />
<xsl:value-of select="@id"/> <xsl:value-of select="."/>
</xsl:for-each>
精细。优秀。
我正在采取措施让客户重新排序数据。第一步是能够根据某些条件选择不同的排序。
忽略XSL中参数的可怕复杂性,我将专注于替换单个:
<xsl:sort ... >
带
<xsl:choose>
<xsl:when test="1=1">
<xsl:sort select="." order="descending" data-type="number" />
</xsl:when>
<xsl:otherwise>
<xsl:sort select="." order="descending" data-type="number" />
</xsl:otherwise>
</xsl:choose>
请注意,我甚至没有尝试介绍不同排序的复杂性。它仍然是xsl:sort
,只是包含在xsl:choose
。
除非它不起作用。不幸的是,没有浏览器会告诉你问题是什么。他们只是说
XSLT8690:XSLT处理失败。
这就是XSL开发人员可用的编程工具的范围。
xsl的一个规则是*“没有理解,只有什么有效,什么没有”。为此,我尝试为xsl
布尔语法提出其他语法:
<xsl:when test="1=1">
<xsl:when test="1==1">
<xsl:when test="1>0">
<xsl:when test="1 > 0">
<xsl:when test="1 > 0">
据我所知,问题与xsl:when
无关。
IE或Chrome可以调试xsl吗?我可以放置断点并执行,将鼠标悬停在变量,步骤线上吗?
xml 文件通过样式表包含 xsl 文件:
sqm.xml
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='sqm.xslt' media='all'?>
<Sqm version="1.2">
...
</Sqm>
答案 0 :(得分:2)
你不能将xsl:sort
直接放在条件结构中,所以你在那里选择的布尔表达式并不重要; XSLT无效。但是,你可以这样做:
<xsl:for-each select="Metrics/Metric">
<xsl:sort select="@id[0 = 1]" />
<xsl:sort select="@sum[1 = 1]" order="descending" data-type="number" />
<xsl:sort select="@count[0 = 1]" order="descending" data-type="number" />
<xsl:sort select="@minValue[1 = 1]" order="descending" data-type="number" />
<xsl:sort select="@maxValue[0 = 1]" order="descending" data-type="number" />
<xsl:value-of select="@id"/> <xsl:value-of select="."/>
</xsl:for-each>
(当然,你想要使用实际上有意义的布尔表达式,我只是将我的例子基于你的。)
以上内容应首先按@sum
对项目进行排序,然后按@minValue
对其进行排序,并忽略其他所有内容。
要回答你的奖金问题,我不知道任何浏览器中的任何XSLT调试功能,但某些版本的Visual Studio(我告诉他们,Eclipse)确实提供了XSLT调试功能,以及VS和Eclipse应该给你比你现在得到的更有意义的错误信息。您还可以使用Saxon的命令行工具来解决这些问题。它也应该为您提供有意义的错误消息,例如上面的问题。