File Coverage

blib/lib/XML/FromPerl.pm
Criterion Covered Total %
statement 9 11 81.8
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 13 15 86.6


line stmt bran cond sub pod time code
1             package XML::FromPerl;
2              
3             our $VERSION = '0.01';
4              
5 1     1   64069 use 5.010;
  1         6  
6 1     1   8 use strict;
  1         3  
  1         32  
7 1     1   7 use warnings;
  1         4  
  1         40  
8              
9 1     1   181 use XML::LibXML;
  0            
  0            
10              
11             require Exporter;
12             our @ISA = qw(Exporter);
13              
14             our @EXPORT_OK = qw(xml_from_perl xml_node_from_perl);
15              
16             sub xml_node_from_perl {
17             my $doc = shift;
18             my $data = shift;
19              
20             if (ref $data eq 'ARRAY') {
21             my $e = $doc->createElement($data->[0]);
22             my $one = $data->[1];
23             my $has_attrs = ref $one eq 'HASH';
24             if ($has_attrs) {
25             my @keys = keys %$one;
26             @keys = sort @keys unless tied %$one;
27             for (@keys) {
28             if (defined (my $v = $one->{$_})) {
29             $e->setAttribute($_, $v);
30             }
31             }
32             }
33             $e->appendChild(xml_node_from_perl($doc, $data->[$_]))
34             for (($has_attrs ? 2 : 1) .. $#$data);
35              
36             return $e;
37             }
38             $doc->createTextNode("$data");
39             }
40              
41             sub xml_from_perl {
42             my $data = shift;
43             my $doc = XML::LibXML::Document->new(@_);
44             my $root = xml_node_from_perl($doc, $data);
45             $doc->setDocumentElement($root);
46             $doc
47             }
48              
49             1;
50             __END__