0

我有一个 XML 文件,其中包含有关此类事件的描述和日期:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="timedate.xsl"?>
<catalog>
    <event>
        <name>AAA Festival</name>
        <place>New York</place>
        <country>USA</country>
        <date>19/11/2013</date>
    </event>
    <event>
        <name>BBB Festival</name>
        <place>Paris</place>
        <country>France</country>
        <date>11/10/2013</date>
    </event>
    <event>
        <name>CCC Festival</name>
        <place>London</place>
        <country>UK</country>
        <date>29/09/2013</date>
    </event>
</catalog>

和一个 XSL 文件:

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

<xsl:template match="/">
<html>
  <body>
    <h2>Upcoming events</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Name</th>
        <th>Place</th>
        <th>Country</th>
        <th>Date</th> 
      </tr>
      <xsl:for-each select="catalog/event">
      <xsl:sort select="date" order="descending"/>
      <tr>
        <td><xsl:value-of select="name"/></td>
        <td><xsl:value-of select="place"/></td>
        <td><xsl:value-of select="country"/></td>
        <td><xsl:value-of select="date"/></td>
</tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

我想制作一个页面,仅对即将发生的事件(包括今天的日期)进行排序和列出。我不能这样做,因为日期格式不正确,我可以获取当前日期来比较它们并打印未来的事件。请通过有效的示例告诉我解决方案。提前感谢您的回复和帮助。问候!

4

1 回答 1

0

比较/排序与将原始日期转换为数字格式有关的日期的想法。例如通过公式year*372+12*month*31+day(372 和 31 是可以的,因为你真的不需要精确的数字)

如果您的 xml 具有固定的日期格式(例如,您确定 1 始终是01),您可以使用 XPath 函数子字符串

已编辑-关于您的声明,我正在放置 xsl 的完整样本。

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

<xsl:template match="/">
<html>
  <body>
    <h2>Upcoming events</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Name</th>
        <th>Place</th>
        <th>Country</th>
        <th>Date</th> 
      </tr>
      <xsl:for-each select="catalog/event">
        <xsl:sort 
         select="number(substring(date, 7, 4))*372+12*31*number(substring(date, 4, 2))+number(substring(date, 1, 2))" 
         order="descending" data-type="number"/>
        <tr>
            <td><xsl:value-of select="name"/></td>
            <td><xsl:value-of select="place"/></td>
            <td><xsl:value-of select="country"/></td>
            <td><xsl:value-of select="date"/></td>
            <!-- column just for debug-->
            <td><xsl:value-of select="number(substring(date, 7, 4))*372+12*31*number(substring(date, 4, 2))+number(substring(date, 1, 2))"/></td>
        </tr>
      </xsl:for-each>

    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>
于 2013-05-24T14:03:33.117 回答