得到最早的约会

时间:2014-03-19 08:59:30

标签: xml xslt xslt-1.0

需要获取最接近日期的日期列表,当前日期会显示在 current_date

标记中

xslt version 1.0

<current_date>04.04.2014 13:00:00</current_date>
<property_value id="8">
    <property_id>96</property_id>
    <entity_id>237</entity_id>
    <property_dir_id>0</property_dir_id>
    <tag_name>event_date</tag_name>
    <value>19.04.2014 18:00:00</value>
</property_value>
<property_value id="9">
    <property_id>96</property_id>
    <entity_id>237</entity_id>
    <property_dir_id>0</property_dir_id>
    <tag_name>event_date</tag_name>
    <value>05.05.2014 22:00:00</value>
</property_value>
<property_value id="10">
    <property_id>96</property_id>
    <entity_id>237</entity_id>
    <property_dir_id>0</property_dir_id>
    <tag_name>event_date</tag_name>
    <value>07.06.2014 17:00:00</value>
</property_value>

1 个答案:

答案 0 :(得分:1)

我不确定“最早”和“最接近”是什么意思。但是,您可以使用以下技术对日期进行排序:

<xsl:variable name="sortedDateCsvList">
  <xsl:for-each select="property_value/value | current_date">
    <xsl:sort select="substring(.,7,4)"/><!-- year -->
    <xsl:sort select="substring(.,4,2)"/><!-- month -->
    <xsl:sort select="substring(.,1,2)"/><!-- day -->
    <xsl:sort select="substring(.,12)"/><!-- time -->
    <xsl:value-of select="concat(., ',')"/>
  </xsl:for-each>
</xsl:variable>

然后,您可以使用该变量执行以下操作:

  • 提取最早的日期:

    substring-before($sortedDateCsvList, ',')

  • 提取current_date之后的最近日期:

    substring-before(substring-after($sortedDateCsvList, current_date), ',')

或者,如果您将属性current_date添加到所有order="descending"元素,则可以获得最早的日期和<xsl:sort>之前的最近日期。