[Catalyst] Xml data to html

Xavier Caron xavier.caron at atmel.com
Tue Sep 16 07:22:25 BST 2008


Howdy,

> I expect you could understand me...

As already stated on the list, this is not Catalyst's work. You'll want to use
XML::LibXML, XML::LibXSLT or XML::Twig for this matter instead. Here is a little
sample of what you can do with XML::LibXSLT (by chance, I'm currently deep into
this at the office ;^):

  - libraries.xml (fixed for it wasn't valid)

<?xml version='1.0' encoding='ISO-8859-1'?>

<libraries>
    <library name="Wolf">
          <book name="The King"/>
          <book name="The Queen"/>
    </library>
    <library name="Fox">
          <book name="The Castle"/>
          <book name="The Dragon"/>
    </library>
</libraries>

  - xml_to_html.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' encoding='ISO-8859-1' indent='yes'/>

<xsl:template match='libraries'>
<html>
<head>
  <title>Pedro's Libraries</title>

  <meta name="generator" content="xml_to_html.xsl"/>
  <link rel="stylesheet" href="css/html.css" type="text/css"/>
</head>

<body>
  <h1>Pedro's Libraries</h1>
  <xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match='library'>
  <h2><xsl:value-of select='@name'/> Library</h2>
  <table>
    <xsl:apply-templates/>
  </table>
</xsl:template>

<xsl:template match='book'>
  <tr><td><xsl:value-of select='@name'/></td></tr>
</xsl:template>  

</xsl:stylesheet>

  - xml_to_html

#!/usr/local/bin/perl

use strict;
use warnings;

use XML::LibXSLT;
use XML::LibXML;

my $xslted_dom = transform ( document_file => 'libraries.xml', stylesheet_file => 'xml_to_html.xsl' );

print $xslted_dom->toString ( 1 ); # or toFile ( 'libraries.html', 1 ) see perldoc XML::LibXML::Document

sub transform {
  my ( %h ) = @_;
  
  my $xml_parser  = XML::LibXML->new;
  my $xslt_parser = XML::LibXSLT->new;
  
  $xml_parser->validation   ( 0 ); # perldoc XML::LibXML::Parser
  $xml_parser->load_ext_dtd ( 0 );
  
  my $xml_dom    = $xml_parser->parse_file ( $h{document_file}   );
  my $xsl_dom    = $xml_parser->parse_file ( $h{stylesheet_file} );

  my $stylesheet = $xslt_parser->parse_stylesheet ( $xsl_dom );
  
  $stylesheet->transform ( $xml_dom, @{$h{parameter_list}} );
}

FYI, xml_to_html is Perl equivalent for xsltproc (libxslt) point-tool:

  % xsltproc xml_to_html.xsl libraries.xml

This should help you for this XSLT rather steep learning curve.

Cheers,

X.



More information about the Catalyst mailing list