File Coverage

blib/lib/XML/Handler/ExtOn/SAX12ExtOn.pm
Criterion Covered Total %
statement 18 46 39.1
branch 0 10 0.0
condition 0 5 0.0
subroutine 6 9 66.6
pod 0 2 0.0
total 24 72 33.3


line stmt bran cond sub pod time code
1             package XML::Handler::ExtOn::SAX12ExtOn;
2             #$Id: SAX12ExtOn.pm 316 2008-09-14 14:25:23Z zag $
3              
4 4     4   40 use XML::Filter::SAX1toSAX2;
  4         9  
  4         100  
5 4     4   24 use XML::Handler::ExtOn;
  4         9  
  4         127  
6              
7             #use base qw/ XML::Handler::ExtOn XML::Filter::SAX1toSAX2/;
8 4     4   26 use base qw/ XML::Handler::ExtOn/;
  4         8  
  4         374  
9 4     4   21 use strict;
  4         9  
  4         146  
10 4     4   29 use warnings;
  4         9  
  4         117  
11 4     4   36 use Data::Dumper;
  4         9  
  4         2007  
12              
13             sub _scan_namespaces {
14 0     0     my $self = shift;
15 0           my ( $elem, $attributes ) = @_;
16 0           while ( my ( $attr_name, $value ) = each %$attributes ) {
17 0 0         if ( $attr_name =~ /^xmlns(:(.*))?$/ ) {
18 0   0       my $prefix = $2 || '';
19 0           $elem->ns->declare_prefix( $prefix, $value );
20             }
21             }
22             }
23              
24             sub process_a_name {
25 0     0 0   my $self = shift;
26 0           my $elem = shift;
27 0           my $key = shift;
28 0           my ( $lname, $prefix ) = reverse split( /:/, $key );
29 0           my $ns = $elem->ns->get_uri($prefix);
30             # warn "key: $key prefix: $prefix ns_iri: $ns ";
31 0 0         unless ( defined $ns ) {
32 0           $prefix = undef;
33             }
34             #for attributes !
35 0 0         $ns = undef unless defined $prefix;
36 0           return ( $lname, $ns, $prefix );
37             }
38              
39             sub start_element {
40 0     0 0   my ( $self, $element ) = @_;
41 0           my $elem = $self->mk_element( $element->{Name} );
42 0           my $attr = $element->{Attributes};
43 0           my %by_name = ();
44 0           $self->_scan_namespaces( $elem, $attr );
45 0           while ( my ( $key, $val ) = each %$attr ) {
46 0           my ( $lname, $uri, $prefix, ) = $self->process_a_name( $elem, $key );
47             # delete attribute if unknown prefix
48 0 0 0       if ( ! defined $prefix and $key =~/:/) {
49             next
50 0           }
51 0 0         unless ( defined $prefix ) {
52 0           $elem->attrs_by_name->{$lname} = $val;
53             }
54             else {
55 0           $elem->attrs_by_ns_uri($uri)->{$lname} = $val;
56             }
57             }
58 0           return $self->SUPER::start_element($elem);
59             }
60             1;