Xslt 排序数字
Xslt sort numbers
我正在尝试对一些数字进行排序,但我在排序时遇到了一些问题。
- rep_Tool/@ToolStnNo 是一个节点,可以按任何顺序给我一些工具。
例如:
...
<ToolStnNo>
10
</ToolStnNo>
...
<ToolStnNo>
12
</ToolStnNo>
...
<ToolStnNo>
3
</ToolStnNo>
...
<ToolStnNo>
11
</ToolStnNo>
...
<ToolStnNo>
2
</ToolStnNo>
...
<ToolStnNo>
4
</ToolStnNo>
...
<ToolStnNo>
1
</ToolStnNo>
...
<ToolStnNo>
6
</ToolStnNo>
...
<ToolStnNo>
5
</ToolStnNo>
...
<ToolStnNo>
8
</ToolStnNo>
...
<ToolStnNo>
7
</ToolStnNo>
...
我得到的结果 table 是:
10 --- > This 10 dont be here
1
2
3
4
5
6
7
8
11
12
13
右边是:
1
2
3
4
5
6
7
8
10 --- > This 10 should be here
11
12
13
<xsl:for-each select="MillSetupSheetAttr">
<xsl:for-each select="MillOperation">
<xsl:sort select="rep_Tool/@ToolStnNo" data-type="number"/>
<tr>
<td><font><xsl:value-of select="rep_Tool/@ToolStnNo"/></font></td>
</tr>
</xsl:for-each>
</xsl:for-each>
注:xml文档相关部分的实际结构为:
<MillSetupSheetAttr>
<MillOperation>
<rep_Tool ToolStnNo="10" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="1" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="2" .../>
</MillOperation>
</MillSetupSheetAttr>
您在问题中显示的 XML 并不代表您的实际 XML(重要的是在您的问题中显示一个有代表性的示例,否则当文件从 drop 中消失时-box,这个问题的上下文可能会丢失)。
这将更能代表您的 XML:
<Data>
<MillSetupSheetAttr>
<MillOperation>
<rep_Tool ToolStnNo="10" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="1" .../>
</MillOperation>
</MillSetupSheetAttr>
<MillSetupSheetAttr>
<MillOperation>
<rep_Tool ToolStnNo="12" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="3" .../>
</MillOperation>
</MillSetupSheetAttr>
</Data>
您有多个 MillSetupSheetAttr
元素,您遇到的问题是因为您目前有一个嵌套的 xsl:for-each
...
<xsl:for-each select="MillSetupSheetAttr">
<xsl:for-each select="MillOperation">
<xsl:sort select="rep_Tool/@ToolStnNo" data-type="number"/>
这意味着它将分别对每个 MillSetupSheetAttr
元素中的 MillOperation
元素进行排序。因此,您将首先获得第一个 MillSetupSheetAttr
的排序 MillOperation
,然后是第二个 MillSetupSheetAttr
.
的排序 MillOperation
要解决这个问题,您应该将两个 xsl:for-each
语句合并为一个:
<xsl:for-each select="MillSetupSheetAttr/MillOperation">
<xsl:sort select="rep_Tool/@ToolStnNo" data-type="number"/>
<tr>
<td><font><xsl:value-of select="rep_Tool/@ToolStnNo"/></font></td>
</tr>
</xsl:for-each>
这将一次性对所有 MillOperation
个元素进行排序。
我正在尝试对一些数字进行排序,但我在排序时遇到了一些问题。
- rep_Tool/@ToolStnNo 是一个节点,可以按任何顺序给我一些工具。
例如:
...
<ToolStnNo>
10
</ToolStnNo>
...
<ToolStnNo>
12
</ToolStnNo>
...
<ToolStnNo>
3
</ToolStnNo>
...
<ToolStnNo>
11
</ToolStnNo>
...
<ToolStnNo>
2
</ToolStnNo>
...
<ToolStnNo>
4
</ToolStnNo>
...
<ToolStnNo>
1
</ToolStnNo>
...
<ToolStnNo>
6
</ToolStnNo>
...
<ToolStnNo>
5
</ToolStnNo>
...
<ToolStnNo>
8
</ToolStnNo>
...
<ToolStnNo>
7
</ToolStnNo>
...
我得到的结果 table 是:
10 --- > This 10 dont be here
1
2
3
4
5
6
7
8
11
12
13
右边是:
1
2
3
4
5
6
7
8
10 --- > This 10 should be here
11
12
13
<xsl:for-each select="MillSetupSheetAttr">
<xsl:for-each select="MillOperation">
<xsl:sort select="rep_Tool/@ToolStnNo" data-type="number"/>
<tr>
<td><font><xsl:value-of select="rep_Tool/@ToolStnNo"/></font></td>
</tr>
</xsl:for-each>
</xsl:for-each>
注:xml文档相关部分的实际结构为:
<MillSetupSheetAttr>
<MillOperation>
<rep_Tool ToolStnNo="10" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="1" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="2" .../>
</MillOperation>
</MillSetupSheetAttr>
您在问题中显示的 XML 并不代表您的实际 XML(重要的是在您的问题中显示一个有代表性的示例,否则当文件从 drop 中消失时-box,这个问题的上下文可能会丢失)。
这将更能代表您的 XML:
<Data>
<MillSetupSheetAttr>
<MillOperation>
<rep_Tool ToolStnNo="10" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="1" .../>
</MillOperation>
</MillSetupSheetAttr>
<MillSetupSheetAttr>
<MillOperation>
<rep_Tool ToolStnNo="12" .../>
</MillOperation>
<MillOperation>
<rep_Tool ToolStnNo="3" .../>
</MillOperation>
</MillSetupSheetAttr>
</Data>
您有多个 MillSetupSheetAttr
元素,您遇到的问题是因为您目前有一个嵌套的 xsl:for-each
...
<xsl:for-each select="MillSetupSheetAttr">
<xsl:for-each select="MillOperation">
<xsl:sort select="rep_Tool/@ToolStnNo" data-type="number"/>
这意味着它将分别对每个 MillSetupSheetAttr
元素中的 MillOperation
元素进行排序。因此,您将首先获得第一个 MillSetupSheetAttr
的排序 MillOperation
,然后是第二个 MillSetupSheetAttr
.
MillOperation
要解决这个问题,您应该将两个 xsl:for-each
语句合并为一个:
<xsl:for-each select="MillSetupSheetAttr/MillOperation">
<xsl:sort select="rep_Tool/@ToolStnNo" data-type="number"/>
<tr>
<td><font><xsl:value-of select="rep_Tool/@ToolStnNo"/></font></td>
</tr>
</xsl:for-each>
这将一次性对所有 MillOperation
个元素进行排序。