File Coverage

blib/lib/XML/Filter/XSLT/LibXSLT.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1             # $Id: LibXSLT.pm,v 1.4 2002/02/25 13:08:55 matt Exp $
2              
3             package XML::Filter::XSLT::LibXSLT;
4 1     1   9 use strict;
  1         1  
  1         47  
5              
6 1     1   469 use XML::LibXSLT;
  0            
  0            
7             use XML::LibXML::SAX::Builder;
8             use XML::LibXML::SAX::Parser;
9              
10             use vars qw(@ISA);
11             @ISA = qw(XML::LibXML::SAX::Builder);
12              
13             sub new {
14             my $class = shift;
15             my %params = @_;
16             my $self = bless \%params, $class;
17             return $self;
18             }
19              
20             sub set_stylesheet_uri {
21             # hey look, now it does what the synopsis says it can.. ;->
22             my $self = shift;
23             my $uri = shift;
24             $self->{Source}{SystemId} = $uri;
25             }
26              
27             sub start_document {
28             my $self = shift;
29              
30             # copy logic from XML::SAX::Base for getting "something" out of Source key.
31             # parse stylesheet
32             # store
33             # return
34             my $parser = XML::LibXML->new;
35             my $styledoc;
36             if (defined $self->{Source}{CharacterStream}) {
37             die "CharacterStream is not supported";
38             }
39             elsif (defined $self->{Source}{ByteStream}) {
40             $styledoc = $parser->parse_fh($self->{Source}{ByteStream}, $self->{Source}{SystemId} || '');
41             }
42             elsif (defined $self->{Source}{String}) {
43             $styledoc = $parser->parse_string($self->{Source}{String}, $self->{Source}{SystemId} || '');
44             }
45             elsif (defined $self->{Source}{SystemId}) {
46             $styledoc = $parser->parse_file($self->{Source}{SystemId});
47             }
48            
49             if (!$styledoc) {
50             die "Could not create stylesheet DOM";
51             }
52              
53             $self->{StylesheetDOM} = $styledoc;
54             $self->SUPER::start_document(@_)
55              
56             }
57              
58             sub end_document {
59             my $self = shift;
60             my $dom = $self->SUPER::end_document(@_);
61             # parse stylesheet
62             my $xslt = XML::LibXSLT->new;
63             my $stylesheet = $xslt->parse_stylesheet($self->{StylesheetDOM});
64             # transform
65             my $results = $stylesheet->transform($dom);
66             # serialize to Handler and co.
67             my $parser = XML::LibXML::SAX::Parser->new(%$self);
68             $parser->generate($results);
69             }
70              
71             sub set_handler {
72             my $self = shift;
73             $self->{Handler} = shift;
74             $self->{Parser}->set_handler( $self->{Handler} )
75             if $self->{Parser};
76             }
77              
78             1;
79             __END__