-1

次の XSLT ブロックを使用して、XML ファイルの「最新」項目から説明を取得します。日付で並べ替え (私の XML では のように表示されます<date>2011-11-15</date>)、並べ替えられたリストから一番上のものを選びます。一部のアイテムには日付がなく、単に のように表示されていることを発見しましたが<date/>。問題は、私の XSLT がこれらをソート済みリストの一番上にソートし、日付のない項目を最初に選択することです。

では、長さが 0 より大きい項目を日付で並べ替えるにはどうすればよいでしょうか。

<?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)フォーマットのために日付を3つの部分に分割する必要はありません。すべての日付がYYYY-MM-のフォーマットである場合システムが奇妙な照合シーケンスを使用することを決定しない限り、DDはその場合、まっすぐなアルファベットのソートがその仕事をするはずです。その場合、<xsl:sort select="number(translate(date, '-', ''))" data-type="number"/>より安全かもしれません。

于 2012-11-15T14:38:18.260 に答える