[xsl] Re[2]: Shorter, better, nicer XSLT

Subject: [xsl] Re[2]: Shorter, better, nicer XSLT
From: Antonio Bueno <atnbueno@xxxxxxxxxx>
Date: Sat, 16 Mar 2002 10:37:47 +0100
Hola, David. :)

MD> I don't think I would recommend this, but you could replace all
MD> the XSLT template complexity with XPATH complexity. [...] I send
MD> it only for amusement.

Well, thank you *very* much for sending it. Your solution is hard to
read but the idea of moving complexity to XPath was new for me...

And this morning I started to play around and came with a simpler (I
think), not so hard to read (I hope) solution. And no, I don't know
about its efficiency either.

At the end of the message you have a stripped down version of another
transformation (this one didn't search text, just select some
"parrillas" and shows them), but the main idea is that to get

    parrilla[@fecha=$fecha]

I use

    parrilla[contains(concat('*',@fecha),$fecha]

The catch is that to use it for channels, I have to avoid channel IDs
contained in other channel ID. I had a few of them (CP and CPA, FOX
and FOXN, ...) in the full version but it's not a problem to change
them because they are just arbitrary ones.

Best,
 Antonio

http://mundoplus.tv
mailto:atnbueno@xxxxxxxxxxxx


----- parrillas0.xsl -------------------------------------------------

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:param name="canal"/>
  <xsl:param name="fecha"/>
  <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"; encoding="ISO-8859-1" indent="yes" method="xml"/>

  <xsl:template match="/">
    <html>
      <head>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
        <title>mundoplus.tv - Parrillas de programación</title>
      </head>
      <body>
        <h1 class="titulo">
          <xsl:text>Parrillas de programación</xsl:text>
        </h1>
        <form action="parrillas0.asp" method="get">
          <div>
            <select name="canal">
              <xsl:apply-templates select="programacion/canal"/>
            </select>
            <select name="fecha">
              <xsl:apply-templates select="programacion/fecha"/>
            </select>
            <input class="submit" type="image" src="search.gif"/>
          </div>
        </form>
        <xsl:apply-templates select="programacion"/>
        <xsl:if test="($canal='')or($fecha='')">
          <p>
            <xsl:text>Indique qué parrilla de programación desea ver.</xsl:text>
          </p>
        </xsl:if>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="programacion">
    <xsl:if test="($canal!='*')or($fecha!='*')">
      <xsl:apply-templates select="parrilla[(contains(concat('*',@canal),$canal))and(contains(concat('*',@fecha),$fecha))]"/>
    </xsl:if>
    <xsl:if test="($canal='*')and($fecha='*')">
      <p>Lo siento, pero has de escoger un canal o una fecha.</p>
    </xsl:if>
  </xsl:template>

  <xsl:template match="canal">
    <option value="{@id}">
      <xsl:if test="@id=$canal">
        <xsl:attribute name="selected">selected</xsl:attribute>
      </xsl:if>
      <xsl:value-of select="."/>
    </option>
  </xsl:template>

  <xsl:template match="fecha">
    <option value="{@id}">
      <xsl:if test="@id=$fecha">
        <xsl:attribute name="selected">selected</xsl:attribute>
      </xsl:if>
      <xsl:value-of select="."/>
    </option>
  </xsl:template>

  <xsl:template match="parrilla">
    <div class="parrilla">

      <br/>&#160;<b>'*<xsl:value-of select="@fecha"/>' does
      <xsl:if test="not(contains(concat('*',@fecha),$fecha))">not</xsl:if>
      contain '<xsl:value-of select="$fecha"/>'</b><br/>

      <br/>&#160;<b>'*<xsl:value-of select="@canal"/>' does
      <xsl:if test="not(contains(concat('*',@canal),$canal))">not</xsl:if>
      contain '<xsl:value-of select="$canal"/>'</b><br/>

    </div>
  </xsl:template>

</xsl:transform>


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread