XSL, сравнивая даты, чтобы исключить любые прошлые события - PullRequest
0 голосов
/ 31 августа 2009

У меня есть RSS-лента новостей. Я хотел бы скрыть предыдущие события.

Предполагая подмножество XML-данных

<Navigation Name="ItemList" Type="Children">
<Page ID="x32444" URL="..." Title="Class..."
EventStartDate="20090831T23:00:00" EventEndDate="20090904T23:00:00"
  EventStartTime="20090830T15:30:00" EventEndTime="20090830T18:30:00" Changed="20090830T20:28:31" CategoryIds="" Schema="Event"
  Name="Class of 2010 BAKE SALE"/>
 <Page ID="x32443" URL="x32443.xml?Preview=true&Site=&UserAgent=&IncludeAllPages=true&tfrm=4" Title="Class of 2010 BAKE SALE"
  Abstract="Treat yourself with our famous 10-star FRIED ICE CREAM!" EventStartDate="20090831T23:00:00" EventEndDate="20090904T23:00:00"
  EventStartTime="20090830T15:30:00" EventEndTime="20090830T18:30:00" Changed="20090830T20:25:35" CategoryIds="" Schema="Event"
  Name="Class of 2010 BAKE SALE"/>
 <Page ID="x32426" URL="x32426.xml?Preview=true&Site=&UserAgent=&IncludeAllPages=true&tfrm=4" Title="Tribute to ..."
  Abstract="Event to recognize and celebrate the lifetime of leadership and service ..."
  EventStartDate="20091206T00:00:00" EventEndDate="20091206T00:00:00" EventStartTime="20090828T23:00:00" EventEndTime="20090828T04:00:00"
  Changed="20090828T22:09:54" CategoryIds="" Schema="Event" Name="Tribute to ...."/>


</Navigation>

Как бы я не включил что-нибудь после сегодняшней даты

<xsl:apply-template select="Page[@EventStartDate=notBeforeToday()]"/>

Ответы [ 2 ]

0 голосов
/ 16 сентября 2009

Для этой цели я обычно добавляю дополнительный атрибут даты в XML, который содержит номер дня с 1900 года.

например @ dateid = '9876543' или @ секунд = "9876675446545"

тогда я могу легко сравнить с сегодняшним днем ​​или другой переменной в XSL.

Вы также можете использовать эту технику для сравнения времени, используя "Unix time", например

0 голосов
/ 01 сентября 2009

Проще всего с параметрами XSL, которые вы устанавливаете извне.

<xsl:param name="today" select="'undefined'" />

<!-- time passes... -->

<xsl:apply-templates select="Page[@EventStartDate &lt; $today]"/>

Ваш формат даты таков, что вы можете сравнить его, используя сравнение строк, если только не задействованы разные часовые пояса. Вы бы просто установили

20091001T00:00:00

как значение параметра для $today. Загляните в документацию по вашему процессору XSLT, чтобы узнать как.

Альтернативой может быть использование функции расширения. Здесь это зависит от того, какие функции расширения поддерживает ваш процессор XSLT, поэтому этот подход не будет переносимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...