XSLT:获取最新日期

Min*_*ras 6 xml sorting xslt

我有这样的结构:

  <Info ID="1">
    ...
    <Date>2009-04-21</Date>
  </Info>
  <Info ID="2">
    ...
    <Date>2009-04-22</Date>
  </Info>
  <Info ID="3">
    ...
    <Date>2009-04-20</Date>
  </Info>
Run Code Online (Sandbox Code Playgroud)

我想使用XSLT获取最新日期(在此示例中为2009-04-22).

Min*_*ras 14

想出来,并没有我想象的那么难:

        <xsl:variable name="latest">
          <xsl:for-each select="Info">
            <xsl:sort select="Date" order="descending" />
            <xsl:if test="position() = 1">
              <xsl:value-of select="Date"/>
            </xsl:if>
          </xsl:for-each>
        </xsl:variable>
      <xsl:value-of select="$latest"/>
Run Code Online (Sandbox Code Playgroud)

  • 当面对不同的日期格式(在我的情况下为 dd-mm-yyyy)时,以下排序对我有用:`&lt;xsl:sort select="number(concat(substring(Date,7,4),substring(Date,4) ,2),substring(Date,1,2)))" order="descending" /&gt;` (2认同)

Pet*_*ete 6

XSLT 2.0+:<xsl:perform-sort>当我们想要对元素进行排序而不单独处理元素时使用。<xsl:sort>用于按排序顺序处理元素。由于在本例中您只需要最后一个日期,因此不需要处理每个<Info>元素。使用<xsl:perform-sort>

<xsl:variable name="sorted_dates">
  <xsl:perform-sort select="Info/Date">
     <xsl:sort select="."/>
  </xsl:perform-sort>
</xsl:variable>

<xsl:value-of select="$sorted_dates/Date[last()]"/>
Run Code Online (Sandbox Code Playgroud)

  • 您应该注意,这是 XSLT 2.0 及更高版本。 (2认同)

Dan*_*ley 5

在 XSLT 2.0 或更高版本中,您根本不需要排序;你可以用max()...

<xsl:value-of select="max(//Date/xs:date(.))"/>
Run Code Online (Sandbox Code Playgroud)