#!/usr/local/bin/perl -w # $Id: xslt-parser,v 1.9 2001/03/01 05:22:45 hexmode Exp $ use strict; use XML::XSLT; use Getopt::Std; =head1 NAME xslt-parser - XSLT transformations =head1 SYNOPSIS xslt-parser [options] =head1 DESCRIPTION xslt-parser performs stylesheet transformations. When given a project name, it appends `.xsl' for the XSLT stylesheet and `.xml' for the XML file to apply the stylesheet to and performs the transformation using the XML::XSLT perl module. =head1 OPTIONS =over 4 =item -c Pass through HTML::Clean. You must have HTML::Clean installed. =item -d Turns debugging on. This can produce a lot of noise. =item -n NoWeb. You can use xslt-parser as a CGI script. With this option, it will not output the headers that are usually needed. =item -s Specify a seperate different stylesheet. Usually, xslt-parser will simply append `.xsl' to the project name to get the stylesheet. A different stylesheet can be specified using this option. =head1 AUTHORS Geert Josten , Mark A. Hershberger =head1 SEE ALSO L The w3.org XSLT recommendation at L =cut my %opt; my $usage = "Usage: $0 [options] -d turn debugging mode on -n don't print content-type -s use instead of .xsl as template -w turns warnings on\n"; getopts('cdnws:h', \%opt) || die $usage; die $usage if $opt{h}; ## global vars ## my $noweb = $opt{n} || 0; my $debug = $opt{d} || 0; my $warnings = $opt{w} || 0; my $project = shift || die $usage; my $xslfile = $opt{'s'} || "$project.xsl"; my $xmlfile = $project; my $xslt = XML::XSLT->new (Source => $xslfile, debug => $debug, warnings => $debug); if (! -f $xslfile) { die "$xslfile does not exist."; } if (! -f $xmlfile) { $xmlfile .= ".xml"; if (! -f $xmlfile) { die "$xmlfile does not exist." } } print STDERR qq{Debug : "$debug" NoWeb : "$noweb" Warnings: "$warnings" Project : "$project" XML-file: "$xmlfile" XSL-file: "$xslfile" } if $debug; print $xslt->serve(Source => $xmlfile, clean => $opt{c}, http_headers => ! $noweb);