I discovered a wonderful Template Toolkit

plugin yesterday: XML::Style.

The basic idea, according to the docs, is that you can apply various

attributes to your HTML. The example given is of transforming an HTML

table:


           [% USE xmlstyle

                  table = {

                      attributes = {

                          border      = 0

                          cellpadding = 4

                          cellspacing = 1

                      }

                  }

           %]

           [% FILTER xmlstyle %]

           <table>

           <tr>

             <td>Foo</td> <td>Bar</td> <td>Baz</td>

           </tr>

           </table>

           [% END %]

This didn’t sit quite right with me though, as that seemed to be something

you should be doing in CSS. But as I read through the docs I discovered

you can also change tags. Again though the docs gave a bad example:


           [% FILTER xmlstyle

                     th = {

                         element = 'td'

                         attributes = { bgcolor='red' }

                     }

           %]

           <tr>

             <th>Heading</th>

           </tr>

           <tr>

             <td>Value</td>

           </tr>

           [% END %]

Having been playing with XSLT recently, though, a lightbulb went off. The

real power of this plugin is more to be able to do things like:


   [% USE xmlstyle

        video = {

          pre_start = '<html><head><title="Video Info"></head><body>'

          element = 'table'

          attributes = { class='videoTable' },

          post_end  = '</body></html>'

        }

        title = {

          pre_start = '<tr><td>Title:</td>'

          element    = 'td'

          attributes = { class='videoTitle' }

          post_end  = '</tr>'

        }

        price = {

          pre_start = '<tr><td>Price:</td>'

          element    = 'td'

          attributes = { class='videoPrice' }

          post_end  = '</tr>'

        }

   %]

And then, given some XML such as:


    <video>

      <title>La Double Vie De Veronique</title>

      <price>10.99</price>

    </video>

We end up with:


    <html><head><title="Video Info"></head><body><table class="videoTable">

      <tr><td>Title:</td><td class="videoTitle">La Double Vie De Veronique</td></tr>

      <tr><td>Price:</td><td class="videoPrice">10.99</td></tr>

    </table></body></html>

This could be used as a first step towards “true” XSLT if you’re already using TT. If the only reason you’re moving towards XSLT is because a PHB says to, it might even be enough to convince them that you’ve done so :)

Comments

Leave a Reply