XML-Filter-XSLT-0.03/0040755000076500007740000000000007436433650012461 5ustar mattcvsXML-Filter-XSLT-0.03/Makefile.PL0100644000076500007740000000055407423336116014427 0ustar mattcvsuse ExtUtils::MakeMaker; WriteMakefile( NAME => 'XML::Filter::XSLT', VERSION_FROM => 'lib/XML/Filter/XSLT.pm', PREREQ_PM => { XML::SAX => 0.03, XML::LibXSLT => 1.31, XML::SAX::Writer => 0.20, }, ABSTRACT_FROM => 'lib/XML/Filter/XSLT.pm', AUTHOR => 'Matt Sergeant ', ); XML-Filter-XSLT-0.03/lib/0040755000076500007740000000000007436433650013227 5ustar mattcvsXML-Filter-XSLT-0.03/lib/XML/0040755000076500007740000000000007436433650013667 5ustar mattcvsXML-Filter-XSLT-0.03/lib/XML/Filter/0040755000076500007740000000000007436433650015114 5ustar mattcvsXML-Filter-XSLT-0.03/lib/XML/Filter/XSLT.pm0100644000076500007740000000153207436433622016241 0ustar mattcvs# $Id: XSLT.pm,v 1.3 2002/02/25 13:09:38 matt Exp $ package XML::Filter::XSLT; use strict; use vars qw($VERSION); $VERSION = 0.03; sub new { my $class = shift; # try and load XSLT engines eval { require XML::Filter::XSLT::LibXSLT; }; if (!$@) { return XML::Filter::XSLT::LibXSLT->new(@_); } die "No XSLT engines available"; } 1; __END__ =head1 NAME XML::Filter::XSLT - XSLT as a SAX Filter =head1 SYNOPSIS use XML::SAX::ParserFactory; use XML::Filter::XSLT; use XML::SAX::Writer; my $writer = XML::SAX::Writer->new(); my $filter = XML::Filter::XSLT->new(Handler => $writer); my $parser = XML::SAX::ParserFactory->parser( Handler => $filter); $filter->set_stylesheet_uri("foo.xsl"); $parser->parse_uri("foo.xml"); =head1 DESCRIPTION =head1 AUTHOR =head1 LICENSE =cut XML-Filter-XSLT-0.03/lib/XML/Filter/XSLT/0040755000076500007740000000000007436433650015706 5ustar mattcvsXML-Filter-XSLT-0.03/lib/XML/Filter/XSLT/LibXSLT.pm0100644000076500007740000000424407436433547017473 0ustar mattcvs# $Id: LibXSLT.pm,v 1.4 2002/02/25 13:08:55 matt Exp $ package XML::Filter::XSLT::LibXSLT; use strict; use XML::LibXSLT; use XML::LibXML::SAX::Builder; use XML::LibXML::SAX::Parser; use vars qw(@ISA); @ISA = qw(XML::LibXML::SAX::Builder); sub new { my $class = shift; my %params = @_; my $self = bless \%params, $class; return $self; } sub set_stylesheet_uri { # hey look, now it does what the synopsis says it can.. ;-> my $self = shift; my $uri = shift; $self->{Source}{SystemId} = $uri; } sub start_document { my $self = shift; # copy logic from XML::SAX::Base for getting "something" out of Source key. # parse stylesheet # store # return my $parser = XML::LibXML->new; my $styledoc; if (defined $self->{Source}{CharacterStream}) { die "CharacterStream is not supported"; } elsif (defined $self->{Source}{ByteStream}) { $styledoc = $parser->parse_fh($self->{Source}{ByteStream}, $self->{Source}{SystemId} || ''); } elsif (defined $self->{Source}{String}) { $styledoc = $parser->parse_string($self->{Source}{String}, $self->{Source}{SystemId} || ''); } elsif (defined $self->{Source}{SystemId}) { $styledoc = $parser->parse_file($self->{Source}{SystemId}); } if (!$styledoc) { die "Could not create stylesheet DOM"; } $self->{StylesheetDOM} = $styledoc; $self->SUPER::start_document(@_) } sub end_document { my $self = shift; my $dom = $self->SUPER::end_document(@_); # parse stylesheet my $xslt = XML::LibXSLT->new; my $stylesheet = $xslt->parse_stylesheet($self->{StylesheetDOM}); # transform my $results = $stylesheet->transform($dom); # serialize to Handler and co. my $parser = XML::LibXML::SAX::Parser->new(%$self); $parser->generate($results); } sub set_handler { my $self = shift; $self->{Handler} = shift; $self->{Parser}->set_handler( $self->{Handler} ) if $self->{Parser}; } 1; __END__ =head1 NAME XML::Filter::XSLT::LibXSLT - LibXSLT SAX Filter =head1 SYNOPSIS None - use via XML::Filter::XSLT please. =head1 DESCRIPTION See above. This is a black box! =cut XML-Filter-XSLT-0.03/Changes0100644000076500007740000000021407436433526013750 0ustar mattcvs 0.03 - Add set_stylesheet_uri (Kip Hampton) 0.02 - Added set_handler for SAX::Machines compatibility 0.01 - Initial release XML-Filter-XSLT-0.03/t/0040755000076500007740000000000007436433650012724 5ustar mattcvsXML-Filter-XSLT-0.03/t/01filter.t0100644000076500007740000000112007423336205014520 0ustar mattcvsuse Test; BEGIN { plan tests => 4 } use XML::Filter::XSLT; use XML::SAX::ParserFactory; use XML::SAX::Writer; my $xslt = < New! EOT my $output; my $w = XML::SAX::Writer->new(Output => \$output); my $f = XML::Filter::XSLT->new(Handler => $w, Source => {String => $xslt}); my $p = XML::SAX::ParserFactory->parser(Handler => $f); ok($w); ok($f); ok($p); $p->parse_string(< EOT print "OUTPUT: $output\n"; ok($output); XML-Filter-XSLT-0.03/t/00basic.t0100644000076500007740000000013307407737530014326 0ustar mattcvsuse Test; BEGIN { plan tests => 1 } END { ok($loaded) } use XML::Filter::XSLT; $loaded++; XML-Filter-XSLT-0.03/MANIFEST.SKIP0100644000076500007740000000016407407737530014357 0ustar mattcvsCVS/.* \.bak$ \.sw[a-z]$ \.tar$ \.tgz$ \.tar\.gz$ ^mess/ ^tmp/ ^blib/ ^Makefile$ ^Makefile\.[a-z]+$ ^pm_to_blib$ ~$ XML-Filter-XSLT-0.03/README0100644000076500007740000000054407423337400013331 0ustar mattcvsXML::Filter::XSLT ================= A simple XSLT SAX2 filter. It uses any available XSLT processor on your system that we can use in some SAXy way. Currently this is just XML::LibXSLT (which we use to build a DOM tree), but we expect more processors will be added over time. INSTALLATION: $ perl Makefile.PL $ make $ make test $ su $ make install XML-Filter-XSLT-0.03/MANIFEST0100644000076500007740000000020107407737530013602 0ustar mattcvsChanges MANIFEST MANIFEST.SKIP Makefile.PL README lib/XML/Filter/XSLT.pm lib/XML/Filter/XSLT/LibXSLT.pm t/00basic.t t/01filter.t