-1

我使用以下 XSLT 块从 XML 文件中的“最新”项目中获取描述。它按日期排序(在我的 XML 中显示为<date>2011-11-15</date>),然后从排序列表中选择顶部的日期。虽然我刚刚发现有些项目没有日期,但它们只是显示为<date/>. 问题是我的 XSLT 将这些排序在排序列表的顶部,因此首先选择没有日期的项目。

那么,如何按日期对长度大于零的项目进行排序?

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <xsl:apply-templates select="/products/product">
      <xsl:sort select="normalize-space(substring(date,0,4))" order="ascending" />
      <xsl:sort select="normalize-space(substring(date,4,2))" order="ascending" />
      <xsl:sort select="normalize-space(substring(date,7,2))" order="ascending" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="product">
    <xsl:if test="position()=1">
      <xsl:value-of select="description"/>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>
4

1 回答 1

1

只是避免在排序中包括没有日期的那些:

<xsl:apply-templates select="/products/product[date]">

顺便说一句(a)您似乎选择了列表中最早的项目,而不是最新的,并且(b)确实没有必要将日期分成三个部分进行格式化:如果所有日期的格式均为 YYYY-MM- DD 那么直接的字母排序应该可以完成这项工作,除非系统决定使用奇怪的整理顺序,在这种情况下<xsl:sort select="number(translate(date, '-', ''))" data-type="number"/>可能更安全。

于 2012-11-15T14:38:18.260 回答