| XML-Registry documentation | Contained in the XML-Registry distribution. |
XML::Registry - Perl module for loading and saving an XML registry.
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('<foo id="me">Hello World</foo>');
# 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("",<PL>));
# print the results
print $dump->pl2xml($perl);
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.
Jonathan Eisenzopf, eisen@pobox.com
perl(1), XML::Parser(3).
| XML-Registry documentation | Contained in the XML-Registry distribution. |
# # Copyright (c) 1998 Jonathan Eisenzopf <eisen@pobox.com> # 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 "<perl>"; &Tree2XML($ref->[0],$ref->[1]); print "\n</perl>\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, "</$el>" if scalar(@$tree) > 2; # decrement tree index $index--; } 1; __END__