XSL - Calendario eventos xsl

 
Vista:

Calendario eventos xsl

Publicado por wichu (1 intervención) el 13/01/2009 14:02:55
Hola, quiero hacer un calendario con eventos mediante una xsl, no se si alguien me puede ayudar. He intentado usar las funciones de fecha de XPATH pero por ejemplo si utilizo date:add no me funciona la xsl. Espero que alguien me pueda ayudar. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Calendario eventos xsl

Publicado por Alejandro (227 intervenciones) el 06/07/2023 22:22:51
¡Claro, Wichu! Puedo ayudarte a crear un calendario con eventos utilizando XSLT. Para trabajar con fechas en XSLT, puedes utilizar la extensión EXSLT, que proporciona una serie de funciones de fecha y hora adicionales.

A continuación, te mostraré un ejemplo básico de cómo puedes generar un calendario con eventos utilizando XSLT y la extensión EXSLT:

Archivo XSLT (calendario.xsl):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date">
 
  <xsl:import href="http://exslt.org/dates-and-times" />
 
  <!-- Template principal -->
  <xsl:template match="/">
    <html>
      <head>
        <title>Calendario con eventos</title>
      </head>
      <body>
        <h1>Calendario de eventos</h1>
        <table>
          <thead>
            <tr>
              <th>Lunes</th>
              <th>Martes</th>
              <th>Miércoles</th>
              <th>Jueves</th>
              <th>Viernes</th>
              <th>Sábado</th>
              <th>Domingo</th>
            </tr>
          </thead>
          <tbody>
            <!-- Generar las filas del calendario -->
            <xsl:apply-templates select="eventos/evento" />
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>
 
  <!-- Template para generar las filas del calendario -->
  <xsl:template match="eventos/evento">
    <!-- Obtener la fecha del evento -->
    <xsl:variable name="fechaEvento" select="date:date-time(concat(fecha, 'T', hora))" />
    <xsl:variable name="diaSemana" select="date:day-of-week($fechaEvento)" />
 
    <xsl:if test="$diaSemana = 1">
      <tr>
    </xsl:if>
 
    <td>
      <xsl:value-of select="concat(date:day-in-month($fechaEvento), ' - ', nombre)" />
    </td>
 
    <xsl:if test="$diaSemana = 7">
      </tr>
    </xsl:if>
  </xsl:template>
 
</xsl:stylesheet>

En este ejemplo, asumimos que tienes un archivo XML de eventos con la siguiente estructura:

1
2
3
4
5
6
7
8
9
10
11
12
13
<eventos>
  <evento>
    <fecha>2023-07-01</fecha>
    <hora>09:00:00</hora>
    <nombre>Evento 1</nombre>
  </evento>
  <evento>
    <fecha>2023-07-02</fecha>
    <hora>14:30:00</hora>
    <nombre>Evento 2</nombre>
  </evento>
  <!-- Agrega más eventos según sea necesario -->
</eventos>

El código XSLT generará un calendario con los eventos correspondientes a cada día. Utilizamos la extensión EXSLT para trabajar con fechas y horas. Para obtener el día de la semana de un evento, convertimos la fecha y hora a un objeto de fecha utilizando `date:date-time()`. Luego, utilizamos `date:day-of-week()` para obtener el número del día de la semana.

Dentro del template `match="eventos/evento"`, generamos las filas del calendario. Cuando encontramos un evento en el primer día de la semana (lunes), abrimos una nueva fila (`<tr>`). Luego, mostramos la fecha y el nombre del evento en cada celda (`<td>`). Cuando llegamos al último día de la semana (domingo), cerramos la fila (`</tr>`).

Recuerda ajustar el código según la estructura específica de tu archivo XML de eventos y personalizar el diseño del calendario según tus necesidades.

Esta solución te permitirá generar un calendario con eventos utilizando XSLT y la extensión EXSLT para trabajar con fechas y horas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar