按xslt排序并选择最小值或最大值

孙丹特

需要一些帮助进行排序,然后在XSLT中选择最大值或最小值。

源xml:

<target>
<relatedTarget>
<permitExpiry>2005-07-02T08:11:00.000Z</permitExpiry>
<permitStart>2015-07-11T09:22:00.000Z</permitStart>
</relatedTarget>

<relatedTarget>
<permitExpiry>2003-07-12T08:11:00.000Z</permitExpiry>
<permitStart>2014-07-01T09:22:00.000Z</permitStart>
</relatedTarget>

<relatedTarget>
<permitExpiry>2002-07-10T08:11:00.000Z</permitExpiry>
<permitStart>2016-07-06T09:22:00.000Z</permitStart>
</relatedTarget>
</target>

结果xml:

<target>
<relatedTarget>
<permitStart>2014-07-01T09:22:00.000Z</permitStart>
<permitExpiry>2005-07-02T08:11:00.000Z</permitExpiry>
</relatedTarget>
</target>

基本上我需要从所有日期中得出的结果应该具有最小的permitStart日期和最大的permitExpiry日期。

我的样本xsl:

<xsl:template match="/">


<xsl:variable name="permitStartVar" select="//permitStart"/>        
<xsl:variable name="permitStopVar" select="//permitExpiry"/>        

<xsl:for-each select="relatedTask">     
<xsl:sort select="substring(permitStart,1,4)" /> <!-- Year -->
<xsl:sort select="substring(permitStart,6,2)" /> <!-- Month -->
<xsl:sort select="substring(permitStart,9,2)" /> <!-- Day -->
<xsl:sort select="substring(permitStart,12,2)" /> <!-- Hour -->
<xsl:sort select="substring(permitStart,15,2)" /> <!-- Minute -->
<xsl:sort select="substring(permitStart,18,2)" /> <!-- Second -->


<xsl:sort select="substring(permitExpiry,1,4)" /> <!-- Year -->
<xsl:sort select="substring(permitExpiry,6,2)" /> <!-- Month -->
<xsl:sort select="substring(permitExpiry,9,2)" /> <!-- Day -->
<xsl:sort select="substring(permitExpiry,12,2)" /> <!-- Hour -->
<xsl:sort select="substring(permitExpiry,15,2)" /> <!-- Minute -->
<xsl:sort select="substring(permitExpiry,18,2)" /> <!-- Second --> 
</xsl:for-each>

<target>
<relatedTarget>
<permitStart><xsl:value-of select="$permitStartVar[1]"/></permitStart>
<permitExpiry><xsl:value-of select="$permitStopVar[last()]"/></permitExpiry>
</relatedTarget>    
</target>

</template>
艾萨克·西瓦(Isaac G Sivaa)

当我遵循您的方法时,

<xsl:stylesheet exclude-result-prefixes="xs" version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="target">
  <xsl:variable name="permitStartVar" select="//permitStart"/>
  <xsl:variable name="permitStopVar" select="//permitExpiry"/>
  <xsl:variable name="temp">
     <xsl:for-each select="relatedTarget/permitStart">
        <xsl:sort select="substring(permitStart,1,4)"/>
        <!--Year-->
        <xsl:sort select="substring(permitStart,6,2)"/>
        <!--Month-->
        <xsl:sort select="substring(permitStart,9,2)"/>
        <!--Day-->
        <xsl:sort select="substring(permitStart,12,2)"/>            <!--Hour-->
        <xsl:sort select="substring(permitStart,15,2)"/>
        <!--Minute-->
        <xsl:sort select="substring(permitStart,18,2)"/>
        <!--Second-->
        <xsl:copy-of select="."/>
     </xsl:for-each>
  </xsl:variable>
  <xsl:variable name="temp1">
     <xsl:for-each select="relatedTarget/permitExpiry">
        <xsl:sort select="substring(permitExpiry,1,4)" order="descending"/>
        <!--Year-->
        <xsl:sort select="substring(permitExpiry,6,2)" order="descending"/>
        <!--Month-->
        <xsl:sort select="substring(permitExpiry,9,2)" order="descending"/>
        <!--Day-->
        <xsl:sort select="substring(permitExpiry,12,2)" order="descending"/>
        <!--Hour-->
        <xsl:sort select="substring(permitExpiry,15,2)" order="descending"/>
        <!--Minute-->
        <xsl:sort select="substring(permitExpiry,18,2)" order="descending"/>
        <!--Second-->
        <xsl:copy-of select="."/>
     </xsl:for-each>
  </xsl:variable>
  <target>
     <relatedTarget>
        <permitStart>
           <xsl:value-of select="$temp//permitStart[1]"/>
        </permitStart>
        <permitExpiry>
           <xsl:value-of select="$temp1/permitExpiry[1]"/>
        </permitExpiry>
     </relatedTarget>
  </target>
 </xsl:template>
 </xsl:stylesheet>

输出:

<target>
<relatedTarget>
  <permitStart>2014-07-01T09:22:00.000Z</permitStart>
  <permitExpiry>2003-07-12T08:11:00.000Z</permitExpiry>
</relatedTarget>
</target>

编辑:

更简化的版本:

<xsl:stylesheet exclude-result-prefixes="xs" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="target">
  <xsl:variable name="permitStartVar" select="//permitStart"/>
  <xsl:variable name="permitStopVar" select="//permitExpiry"/>

  <xsl:variable name="temp">
     <xsl:for-each select="relatedTarget/permitStart">
        <xsl:sort select="."/>
        <xsl:copy-of select="."/>
     </xsl:for-each>
  </xsl:variable>
  <xsl:variable name="temp1">
     <xsl:for-each select="relatedTarget/permitExpiry">
        <xsl:sort select="."  order="descending"/>
        <xsl:copy-of select="."/>
     </xsl:for-each>
  </xsl:variable>
  <target>
     <relatedTarget>
        <permitStart>
           <xsl:value-of select="$temp//permitStart[1]"/>
        </permitStart>
        <permitExpiry>
           <xsl:value-of select="$temp1/permitExpiry[1]"/>
        </permitExpiry>
     </relatedTarget>
  </target>
</xsl:template>
</xsl:stylesheet>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同时按最大值和最小值排序时,哪一列优先?

来自分类Dev

排序算法:在列表中选择5作为最小值,0作为最大值

来自分类Dev

铲斗以最大值和最小值排序

来自分类Dev

铲斗以最大值和最小值排序

来自分类Dev

如何按切片值从最小值到最大值对highchart pie jasperstudio进行排序

来自分类Dev

最小值和最大值

来自分类Dev

数组的最小值/最大值

来自分类Dev

根据LINQ中一个值的最小值或最大值进行选择

来自分类Dev

从每个记录的逗号分隔值中选择最小值/最大值

来自分类Dev

选择一列的最小值,另一列的最大值以及与最大值相关的字段

来自分类Dev

在SQL中将最大值排序为最小值无法正常工作

来自分类Dev

如何使用定义的最小值和最大值对数据进行排序

来自分类Dev

将数据集中的列从指定行中的最大值到最小值排序

来自分类Dev

Linq按类别的特定属性分组,然后取最小值和最大值

来自分类Dev

按组划分的最大值和最小值的差异

来自分类Dev

mysql插入按日期分组的最大值最小值

来自分类Dev

按 3 列分组并根据第 4 列找到最大值/最小值?

来自分类Dev

JQuery 按最小值和最大值设置选项范围

来自分类Dev

如何在光滑的同一查询中选择最大值,最小值

来自分类Dev

淘汰赛绑定HTML日期选择器的最小值和最大值

来自分类Dev

VBA:从范围选择中获取最小值和最大值,而忽略NA

来自分类Dev

如何选择子集组的最小值和最大值

来自分类Dev

在一个SQL查询中选择最大值和最小值

来自分类Dev

从pandas中选择局部最小值和最大值

来自分类Dev

在同一列中选择“最大值”和“最小值”

来自分类Dev

T-SQL:选择最小值和最大值的每个实例

来自分类Dev

在不同的列中选择对应于最大值/最小值的元素

来自分类Dev

在每个customerID SQL的特定行之前选择最小值和最大值

来自分类Dev

淘汰赛绑定HTML日期选择器的最小值和最大值

Related 相关文章

  1. 1

    同时按最大值和最小值排序时,哪一列优先?

  2. 2

    排序算法:在列表中选择5作为最小值,0作为最大值

  3. 3

    铲斗以最大值和最小值排序

  4. 4

    铲斗以最大值和最小值排序

  5. 5

    如何按切片值从最小值到最大值对highchart pie jasperstudio进行排序

  6. 6

    最小值和最大值

  7. 7

    数组的最小值/最大值

  8. 8

    根据LINQ中一个值的最小值或最大值进行选择

  9. 9

    从每个记录的逗号分隔值中选择最小值/最大值

  10. 10

    选择一列的最小值,另一列的最大值以及与最大值相关的字段

  11. 11

    在SQL中将最大值排序为最小值无法正常工作

  12. 12

    如何使用定义的最小值和最大值对数据进行排序

  13. 13

    将数据集中的列从指定行中的最大值到最小值排序

  14. 14

    Linq按类别的特定属性分组,然后取最小值和最大值

  15. 15

    按组划分的最大值和最小值的差异

  16. 16

    mysql插入按日期分组的最大值最小值

  17. 17

    按 3 列分组并根据第 4 列找到最大值/最小值?

  18. 18

    JQuery 按最小值和最大值设置选项范围

  19. 19

    如何在光滑的同一查询中选择最大值,最小值

  20. 20

    淘汰赛绑定HTML日期选择器的最小值和最大值

  21. 21

    VBA:从范围选择中获取最小值和最大值,而忽略NA

  22. 22

    如何选择子集组的最小值和最大值

  23. 23

    在一个SQL查询中选择最大值和最小值

  24. 24

    从pandas中选择局部最小值和最大值

  25. 25

    在同一列中选择“最大值”和“最小值”

  26. 26

    T-SQL:选择最小值和最大值的每个实例

  27. 27

    在不同的列中选择对应于最大值/最小值的元素

  28. 28

    在每个customerID SQL的特定行之前选择最小值和最大值

  29. 29

    淘汰赛绑定HTML日期选择器的最小值和最大值

热门标签

归档