# # Copyright (c) 1998 Jonathan Eisenzopf # XML::Registry is free software. You can redistribute it and/or # modify it under the same terms as Perl itself. # package XML::Registry; BEGIN { use strict; use vars qw($VAR1 $VERSION $ref $index); use Data::Dumper; $VERSION='0.02'; } sub new { my $class = {}; local($index) = 0; bless $class; } sub xml2pl { my ($obj,$xml) = @_; return Dumper($xml); } sub pl2xml { my ($obj,$ref) = @_; print ""; &Tree2XML($ref->[0],$ref->[1]); print "\n\n"; } sub Tree2XML { local ($el,$tree) = @_; # increment tree index $index++; # print element name print "\n", " "x($index), "<", $el; # loop through array for (my $i=0; $i < scalar(@$tree); $i++) { # is a sub-element if (ref($tree->[$i]) eq 'ARRAY') { &Tree2XML($el,$tree->[$i]); # print element attribs } elsif (ref($tree->[$i]) eq 'HASH') { my $attribs = $tree->[$i]; foreach my $attrib (keys(%$attribs)) { print " $attrib=".'"'.$attribs->{$attrib}.'"' } # print closing bracket if (scalar(@$tree) > 2) { print ">"; # no cdata for this element } else { print "/>"; } # print cdata } elsif ($tree->[$i] eq 0) { print $tree->[++$i]; } } # close element print "\n", " "x$index, "" if scalar(@$tree) > 2; # decrement tree index $index--; } 1; __END__ =head1 NAME XML::Registry - Perl module for loading and saving an XML registry. =head1 SYNOPSIS use XML::Parser; use XML::Registry; # create a new XML::Parser instance using Tree Style $parser = new XML::Parser (Style => 'Tree'); # create new instance of XML::Registry $dump = new XML::Registry; # Convert XML Registry to Perl code $tree = $parser->parsefile($file); $tree = $parser->parse('Hello World'); # print the results print $dump->xml2pl($tree); # Convert Perl code to XML Registry # read file in Data::Dumper format open(PL,$file) || die "Cannot open $file: $!"; $perl = eval(join("",)); # print the results print $dump->pl2xml($perl); =head1 DESCRIPTION XML::Registry can dump an XML registry to Perl code using Data::Dumper, or dump Perl code into an XML registry. This is done via the following 2 methods: XML::Registry::xml2pl XML::Registry::pl2xml This module was originally written for an article in TPJ. It was an exercise in using the XML::Parser module. =head1 AUTHOR Jonathan Eisenzopf, eisen@pobox.com =head1 SEE ALSO perl(1), XML::Parser(3). =cut