File Coverage

blib/lib/XML/Hash.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package XML::Hash;
2              
3 1     1   26102 use warnings;
  1         3  
  1         32  
4 1     1   7 use strict;
  1         2  
  1         38  
5 1     1   6 use base qw/XML::Simple/;
  1         6  
  1         762  
6             use Carp;
7             use XML::DOM;
8             use File::Slurp;
9              
10             # Config options
11             our %XMLIN_SIMPLE_OPTIONS = (
12             ForceContent => 1,
13             ContentKey => 'text',
14             KeepRoot => 1,
15             KeyAttr => []
16             );
17              
18             our %XMLOUT_SIMPLE_OPTIONS = (
19             ContentKey => 'text',
20             KeepRoot => 1,
21             KeyAttr => []
22             );
23              
24             our $VERSION = '0.95';
25              
26             sub new {
27             my $class = shift;
28              
29             if ( @_ % 2 ) {
30             croak "Default options must be name=>value pairs (odd number supplied)";
31             }
32              
33             my %raw_opt = @_;
34              
35             my %def_opt;
36              
37             while ( my ( $key, $val ) = each %raw_opt ) {
38             my $lkey = lc($key);
39             $def_opt{$lkey} = $val;
40             }
41              
42             my $self = { def_opt => \%def_opt };
43              
44             $class = ref $class if ref $class;
45              
46             $self = bless( $self, $class );
47              
48             $self->_xml_handler( XML::Simple->new(%XMLIN_SIMPLE_OPTIONS) );
49             return $self;
50             }
51              
52             sub _xml_handler {
53             my ($self, $handler) = @_;
54            
55             $self->{'xml_handler'} ||= $handler;
56            
57             return $self->{'xml_handler'};
58             }
59             sub fromDOMtoHash {
60             my ( $self, $xml ) = @_;
61              
62             croak "You must specify a XML::DOM::Document has the XML parameter" unless ( ref($xml) eq "XML::DOM::Document" );
63              
64             return $self->fromXMLStringtoHash( $xml->toString() );
65             }
66              
67             sub fromHashtoDOM {
68             my ( $self, $hash ) = @_;
69              
70             croak "You must specify a Hash to converto into XML" unless ( ref($hash) eq "HASH" );
71              
72             my $xml_string = $self->fromHashtoXMLString($hash);
73             return XML::DOM::Parser->new()->parse($xml_string);
74             }
75              
76             sub fromXMLStringtoHash {
77             my ( $self, $xml_str ) = @_;
78              
79             croak "You must specify a XML string" unless ( defined $xml_str );
80              
81             return $self->_xml_handler()->XMLin( $xml_str, %XMLIN_SIMPLE_OPTIONS );
82             }
83              
84             sub fromHashtoXMLString {
85             my ( $self, $hash ) = @_;
86              
87             croak "You must specify a Hash to converto into XML" unless ( ref($hash) eq "HASH" );
88              
89             return $self->_xml_handler()->XMLout( $hash, %XMLOUT_SIMPLE_OPTIONS );
90              
91             }
92              
93             #sub fromXMLFiletoHash {
94             # my ( $self, $xml_str ) = @_;
95             #
96             # croak "You must specify a filename" unless ( defined $xml_str );
97              
98             # return $self->xml_handler()->XMLin( $xml_str, %XMLIN_SIMPLE_OPTIONS );
99             #}
100              
101             #sub fromHashtoXMLFile {
102             # my ( $self, $hash, $filename ) = @_;
103              
104             # croak "You must specify a Hash to convert into XML file" unless ( ref($hash) eq "HASH" and $filename);
105            
106             # my $output = $self->xml_handler()->XMLout( $hash, %XMLOUT_SIMPLE_OPTIONS );
107            
108             # write_file($filename, $output);
109            
110             # return $output;
111             #}
112              
113             1; # End of XML::Hash
114              
115             __END__